ad_map_access
GeoOperation.hpp
Go to the documentation of this file.
1 // ----------------- BEGIN LICENSE BLOCK ---------------------------------
2 //
3 // Copyright (C) 2018-2021 Intel Corporation
4 //
5 // SPDX-License-Identifier: MIT
6 //
7 // ----------------- END LICENSE BLOCK -----------------------------------
12 #pragma once
13 
17 #include "ad/physics/Distance.hpp"
18 
20 namespace ad {
22 namespace map {
24 namespace point {
25 
29 extern Altitude const AltitudeUnknown;
30 
36 inline bool isValid(GeoPoint const &point, bool const logErrors = true)
37 {
38  return withinValidInputRange(point, logErrors);
39 }
40 
46 inline bool isValid(GeoEdge const &edge, bool const logErrors = true)
47 {
48  return withinValidInputRange(edge, logErrors);
49 }
50 
56 inline double degree2radians(double degree)
57 {
58  return degree * M_PI / 180.0;
59 }
60 
66 inline double radians2degree(double radians)
67 {
68  return radians * 180.0 / M_PI;
69 }
70 
76 inline double toRadians(Latitude const &latitude)
77 {
78  return degree2radians(static_cast<double>(latitude));
79 }
80 
86 inline double toRadians(Longitude const &longitude)
87 {
88  return degree2radians(static_cast<double>(longitude));
89 }
90 
98 inline GeoPoint createGeoPoint(Longitude const longitude, Latitude const latitude, Altitude const altitude)
99 {
100  GeoPoint result;
101  result.longitude = longitude;
102  result.latitude = latitude;
103  result.altitude = altitude;
104  return result;
105 }
106 
111 physics::Distance distance(GeoPoint const &point, GeoPoint const &other);
112 
116 GeoPoint zeroAltitude(GeoPoint const &point);
117 
123 physics::Distance flatDistance(GeoPoint const &point, const GeoPoint &other);
124 
130 GeoPoint approxAltitude(GeoPoint const &point, const GeoEdge &pts);
131 
139 bool isOnTheLeft(GeoPoint const &point, const GeoPoint &pt0, const GeoPoint &pt1);
140 
148 bool haveSameOrientation(const GeoEdge &pts0, const GeoEdge &pts1);
149 
157 bool isOnTheLeft(const GeoEdge &pts0, const GeoEdge &pts1);
158 
161 physics::Distance calcLength(GeoEdge const &edge);
162 
165 template <> inline GeoPoint vectorExtrapolate(GeoPoint const &a, GeoPoint const &b, double const &scalar)
166 {
167  GeoPoint result;
168  result.longitude = (1 - scalar) * a.longitude + scalar * b.longitude;
169  result.latitude = (1 - scalar) * a.latitude + scalar * b.latitude;
170  result.altitude = (1 - scalar) * a.altitude + scalar * b.altitude;
171  return result;
172 }
173 
174 } // namespace point
175 } // namespace map
176 } // namespace ad
ad
namespace ad
Definition: GeometryStoreItem.hpp:28
ad::map::point::degree2radians
double degree2radians(double degree)
Convert degrees to radians.
Definition: GeoOperation.hpp:56
ad::map::point::GeoPoint::latitude
::ad::map::point::Latitude latitude
Definition: GeoPoint.hpp:129
PointOperation.hpp
ad::map::point::isOnTheLeft
bool isOnTheLeft(GeoPoint const &point, const GeoPoint &pt0, const GeoPoint &pt1)
Checks if point is on the left side of the line defined by two points.
ad::map::point::radians2degree
double radians2degree(double radians)
Convert radians to degrees.
Definition: GeoOperation.hpp:66
withinValidInputRange
bool withinValidInputRange(::ad::map::access::MapMetaData const &input, bool const logErrors=true)
check if the given MapMetaData is within valid input range
Definition: MapMetaDataValidInputRange.hpp:37
ad::map::point::GeoPoint
DataType GeoPoint.
Definition: GeoPoint.hpp:47
ad::map::point::vectorExtrapolate
GeoPoint vectorExtrapolate(GeoPoint const &a, GeoPoint const &b, double const &scalar)
specialization of vectorExtrapolate for GeoPoint
Definition: GeoOperation.hpp:165
ad::map::point::GeoPoint::longitude
::ad::map::point::Longitude longitude
Definition: GeoPoint.hpp:124
GeoEdgeValidInputRange.hpp
ad::map::point::distance
physics::Distance distance(BoundingSphere const &left, BoundingSphere const &right)
Computes distance between BoundingSpheres.
Definition: BoundingSphereOperation.hpp:29
ad::map::point::createGeoPoint
GeoPoint createGeoPoint(Longitude const longitude, Latitude const latitude, Altitude const altitude)
create a GeoPoint
Definition: GeoOperation.hpp:98
ad::map::point::isValid
bool isValid(ECEFPoint const &point, bool const logErrors=true)
checks if the given ECEFPoint is valid
Definition: ECEFOperation.hpp:27
ad::map::point::GeoPoint::altitude
::ad::map::point::Altitude altitude
Definition: GeoPoint.hpp:134
ad::map::point::calcLength
physics::Distance calcLength(ECEFEdge const &edge)
calculate the length of the provided border as distance value
ad::map::point::Latitude
DataType Latitude.
Definition: Latitude.hpp:65
ad::map::point::GeoEdge
std::vector<::ad::map::point::GeoPoint > GeoEdge
DataType GeoEdge.
Definition: GeoEdge.hpp:42
ad::map::point::toRadians
double toRadians(Latitude const &latitude)
Convert Latitude to radians.
Definition: GeoOperation.hpp:76
ad::map::point::zeroAltitude
GeoPoint zeroAltitude(GeoPoint const &point)
ad::map::point::flatDistance
physics::Distance flatDistance(GeoPoint const &point, const GeoPoint &other)
Calculated distance between points not taking in account altitude.
ad::map::point::Altitude
DataType Altitude.
Definition: Altitude.hpp:67
ad::map::point::Longitude
DataType Longitude.
Definition: Longitude.hpp:65
ad::map::point::haveSameOrientation
bool haveSameOrientation(const GeoEdge &pts0, const GeoEdge &pts1)
Checks if two GeoEdge have same orientation by taking in account distances between first and last poi...
ad::map::point::approxAltitude
GeoPoint approxAltitude(GeoPoint const &point, const GeoEdge &pts)
Approximates altitude of the point based on other points.
GeoPointValidInputRange.hpp
ad::map::point::AltitudeUnknown
const Altitude AltitudeUnknown
constant defining the unknown altitude