1#ifndef REGION_HPP_NUISLPMU
2#define REGION_HPP_NUISLPMU
4#include <vanetza/geonet/units.hpp>
5#include <vanetza/security/v2/int_x.hpp>
6#include <vanetza/units/angle.hpp>
7#include <vanetza/units/length.hpp>
8#include <boost/variant/variant.hpp>
22 using Elevation = std::array<uint8_t, 2>;
23 static const Elevation unknown_elevation;
24 static const Elevation min_elevation;
25 static const Elevation max_elevation;
28 ThreeDLocation(geonet::geo_angle_i32t latitude, geonet::geo_angle_i32t longitude) :
29 latitude(latitude), longitude(longitude), elevation(unknown_elevation) {}
30 ThreeDLocation(units::GeoAngle latitude, units::GeoAngle longitude) :
31 latitude(latitude), longitude(longitude), elevation(unknown_elevation) {}
32 ThreeDLocation(geonet::geo_angle_i32t latitude, geonet::geo_angle_i32t longitude, Elevation elevation) :
33 latitude(latitude), longitude(longitude), elevation(elevation) {}
34 ThreeDLocation(units::GeoAngle latitude, units::GeoAngle longitude, Elevation elevation) :
35 latitude(latitude), longitude(longitude), elevation(elevation) {}
37 geonet::geo_angle_i32t latitude;
38 geonet::geo_angle_i32t longitude;
49 TwoDLocation(geonet::geo_angle_i32t latitude, geonet::geo_angle_i32t longitude) :
50 latitude(latitude), longitude(longitude) {}
51 TwoDLocation(units::GeoAngle latitude, units::GeoAngle longitude) :
52 latitude(latitude), longitude(longitude) {}
54 latitude(threeD.latitude), longitude(threeD.longitude) {}
56 geonet::geo_angle_i32t latitude;
57 geonet::geo_angle_i32t longitude;
77 center(center), radius(radius) {}
79 center(center), radius(radius) {}
82 geonet::distance_u16t radius;
99using PolygonalRegion = std::list<TwoDLocation>;
102enum class RegionDictionary : uint8_t
111 RegionDictionary region_dictionary;
112 int16_t region_identifier;
120enum class RegionType : uint8_t
133 std::list<RectangularRegion>,
178size_t get_size(
const std::list<CircularRegion>&);
185size_t get_size(
const std::list<RectangularRegion>&);
234void serialize(
OutputArchive&,
const std::list<RectangularRegion>&);
287size_t deserialize(
InputArchive&, std::list<RectangularRegion>&);
335bool is_within(
const TwoDLocation&,
const std::list<RectangularRegion>&);
383bool is_within(
const GeographicRegion&,
const std::list<RectangularRegion>&);
407ThreeDLocation::Elevation to_elevation(units::Length);
IntX specified in TS 103 097 v1.2.1, section 4.2.1.
CircularRegion specified in TS 103 097 v1.2.1, section 4.2.22.
IdentifiedRegion specified in TS 103 097 v1.2.1, section 4.2.25.
Specified in TS 103 097 v1.2.1, section 4.2.20.
RectangularRegion specified in TS 103 097 v1.2.1, section 4.2.23.
ThreeDLocation specified in TS 103 097 v1.2.1, section 4.2.19.
TwoDLocation specified in TS 103 097 v1.2.1, section 4.2.18.