33#include <GeographicLib/UTMUPS.hpp>
37namespace etsi_its_mapem_ts_msgs {
50 time_t ts =
static_cast<time_t
>(unixSecond);
53 timeinfo = gmtime(&ts);
58 timeinfo->tm_hour = 0;
59 timeinfo->tm_mday = 1;
62 return timegm(timeinfo);
109 inline gm::PointStamped
getUTMPosition(
const Position3D& reference_position,
int& zone,
bool& northp) {
110 gm::PointStamped utm_point;
111 double latitude =
getLatitude(reference_position.lat);
112 double longitude =
getLongitude(reference_position.lon);
113 if(reference_position.elevation_is_present) utm_point.point.z =
getElevation(reference_position.elevation);
115 GeographicLib::UTMUPS::Forward(latitude, longitude, zone, northp, utm_point.point.x, utm_point.point.y);
116 std::string hemisphere;
117 if(northp) hemisphere=
"N";
119 utm_point.header.frame_id=
"utm_"+std::to_string(zone)+hemisphere;
120 }
catch (GeographicLib::GeographicErr& e) {
121 throw std::invalid_argument(e.what());
139 gm::PointStamped utm_point;
140 double latitude =
getLatitude(reference_position.lat);
141 double longitude =
getLongitude(reference_position.lon);
142 if(reference_position.elevation_is_present) utm_point.point.z =
getElevation(reference_position.elevation);
145 GeographicLib::UTMUPS::Forward(latitude, longitude, zone, northp, utm_point.point.x, utm_point.point.y, conv_angle, scale);
146 std::string hemisphere;
147 if(northp) hemisphere=
"N";
149 utm_point.header.frame_id=
"utm_"+std::to_string(zone)+hemisphere;
150 }
catch (GeographicLib::GeographicErr& e) {
151 throw std::invalid_argument(e.what());
double getLongitude(const CAM &cam)
Get the Longitude value of CAM.
gm::PointStamped getUTMPosition(const CAM &cam, int &zone, bool &northp)
Get the UTM Position defined within the BasicContainer of the CAM.
double getLatitude(const CAM &cam)
Get the Latitude value of CAM.
MinuteOfTheYear getMinuteOfTheYear(const MapData &map)
Get the value of MinuteOfTheYear object MapData object.
double getElevation(const Elevation &elevation)
Get the Elevation value.
gm::PointStamped getRefPointUTMPosition(const IntersectionGeometry &intsctn, int &zone, bool &northp)
Get the UTM Position of ref_point defined by the Position3D along with the grid-convergence angle in ...
gm::PointStamped getRefPointUTMPositionWithConvergenceAngle(const IntersectionGeometry &intsctn, int &zone, bool &northp, double &conv_angle)
Get the UTM Position of ref_point defined by the Position3D in an IntersectionGeometry object.
uint64_t getUnixSecondsOfYear(const uint64_t unixSecond)
Get the unix seconds of the beginning of a year that corresponds to a given unix timestamp.
uint64_t getUnixNanosecondsFromMinuteOfTheYear(const MinuteOfTheYear &moy, const uint64_t unix_nanoseconds_estimate)
Get the unix nanoseconds from MinuteOfTheYear object.
gm::PointStamped getUTMPositionWithConvergenceAngle(const Position3D &reference_position, int &zone, bool &northp, double &conv_angle)
Get the UTM Position defined by the given Position3D along with the grid-convergence angle.
uint64_t getUnixNanoseconds(const MAPEM &mapem, const uint64_t unix_timestamp_estimate)
Get the unix nanoseconds from MinuteOfTheYear object.
uint64_t getUnixNanosecondsFromMapData(const MapData &map, const uint64_t unix_nanoseconds_estimate)
Get the unix nanoseconds from MapData object.