Conscience Core
CscCartography.h
Go to the documentation of this file.
1 #ifndef CscCartography_H_
2 #define CscCartography_H_
3 
4 #include "Util/conscience_log.h"
5 
6 #include "Axiomes/Csc3dTypes.h"
7 
8 #include <string>
9 
10 using std::string, std::vector, std::exception;
11 
12 using namespace conscience_core::axiomes;
13 using namespace conscience_utils;
14 
16 
18  CC42 = 1,
19  CC43 = 2,
20  CC44 = 3,
21  CC45 = 4,
22  CC46 = 5,
23  CC47 = 6,
24  CC48 = 7,
25  CC49 = 8,
26  CC50 = 9,
27 };
28 
30 
31 double isometricLatitude(double phi, double e);
32 
33 double getDistanceBetweenTwoWGS84Points(const CscPoint3d *firstPoint, const CscPoint3d *secondPoint);
34 
35 CscPoint3d *projectWGS84PointWithDistanceAndAngle(const CscPoint3d *initialPoint, double distance, double angle);
36 
37 CscPoint3d *calculatePositionFromGps(double lat, double lon,
38  double latCornerBLScene, double longCornerBLScene,
39  double latCornerBRScene, double longCornerBRScene,
40  double latCornerTLScene, double longCornerTLScene,
41  double latCornerTRScene, double longCornerTRScene);
42 
43 
45  double latitude, double longitude, double rotationFromNorthRad, double distanceMeters);
46 
48  double latitude, double longitude, double altitudeInMeters,
49  double widthFOV, double heightFOV, double heading, double cameraOrientation,
50  double photoX, double photoY, double imageHeight, double imageWidth);
51 
52 
54  EPSG9842, // CC42
55  EPSG9843, // CC43
56  EPSG9844, // CC44
57  EPSG9845, // CC45
58  EPSG9846, // CC46
59  EPSG9847, // CC47
60  EPSG9848, // CC48
61  EPSG9849, // CC49
62  EPSG9850, // CC50
63  EPSG3395, // mercator
64 };
65 
67 public:
68  virtual ~CscCartographicProjection();
69 
70  CscPoint3d *projectPointFromWGS84(const string &target, const CscPoint3d *position);
71  CscPoint3d *projectPointToWGS84(const string &src, const CscPoint3d *position);
72  CscPoint3d *projectPointFromWGS84ToConsciencePosition(const CscPoint3d *position);
73  CscPoint3d *projectPointFromConsciencePositionToWGS84(const CscPoint3d *position);
74  CscCartographicProjectionType getEpsgProjectionFromString(string epsgCode);
75  CscPoint3d *projectPointFromWGS84WithReferencePoint(const string &target, const CscPoint3d *position, const CscPoint3d *referencePoint);
76  CscPoint3d *projectPointToWGS84WithReferencePoint(const string &src, const CscPoint3d *position, const CscPoint3d *referencePoint);
77 
79  if (instance == nullptr) {
81  }
82  return instance;
83  }
84 
85  inline static constexpr const char* EPSG3395_DEF = "EPSG3395";
86  inline static constexpr const char* EPSG9849_DEF = "EPSG9849";
87  inline static constexpr const char* ESRI54032_DEF = "ESRI54032";
88 
92  inline static constexpr const char* DEFAULT_PROJECTION_DEF = EPSG3395_DEF;
94 
95 
99  inline static constexpr const char* FRANCE_PROJECTION_DEF = EPSG9849_DEF;
101 
102 private:
104  // Position in Mercator of ConscienceLabs, its use for reduce number of digits in the position
105  const long double latRef = 627905946.399036;
106  const long double lngRef = -3945574.63582955;
107  inline static CscCartographicProjection *instance = nullptr;
108  map<CscCartographicProjectionType, string> cartographicProjectionType;
109  map<string, CscCartographicProjectionType> cartographicProjectionTypeName;
110  const string getProjectionDefinition(const string &projectionType);
111  const string wgs84 = "+proj=longlat +datum=WGS84 +no_defs +type=crs";
112  mutex projMutex;
113 };
114 
115 }
116 
117 #endif
conscience_log.h
conscience_core::axiomes::CscPoint3d
The CscPoint3d class represents a point in three-dimensional space. It is primarily used to denote a ...
Definition: Csc3dTypes.h:24
conscience_utils::Cartography::CC43
@ CC43
Definition: CscCartography.h:19
conscience_utils::Cartography::CscCartographicProjection::getInstance
static CscCartographicProjection * getInstance()
Definition: CscCartography.h:78
conscience_core::axiomes
Definition: Csc2dTypes.cpp:9
conscience_utils::Cartography::getDistanceBetweenTwoWGS84Points
double getDistanceBetweenTwoWGS84Points(const CscPoint3d *firstPoint, const CscPoint3d *secondPoint)
Definition: CscCartography.cpp:232
conscience_utils::Cartography::CC42
@ CC42
Definition: CscCartography.h:18
conscience_utils::Cartography::CscCartographicProjectionType
CscCartographicProjectionType
Definition: CscCartography.h:53
conscience_utils::Cartography::CC49
@ CC49
Definition: CscCartography.h:25
conscience_utils::Cartography::CC46
@ CC46
Definition: CscCartography.h:22
conscience_utils::Cartography::CC45
@ CC45
Definition: CscCartography.h:21
conscience_utils::Cartography::CC50
@ CC50
Definition: CscCartography.h:26
conscience_utils::Cartography::EPSG9843
@ EPSG9843
Definition: CscCartography.h:55
conscience_utils::Cartography::isometricLatitude
double isometricLatitude(double phi, double e)
Definition: CscCartography.cpp:36
conscience_utils::Cartography::CC47
@ CC47
Definition: CscCartography.h:23
conscience_utils::Cartography::projectWGS84PointWithDistanceAndAngle
CscPoint3d * projectWGS84PointWithDistanceAndAngle(const CscPoint3d *initialPoint, double distance, double angle)
Definition: CscCartography.cpp:302
conscience_utils::Cartography::EPSG9849
@ EPSG9849
Definition: CscCartography.h:61
conscience_utils::Cartography
Definition: CscCartography.cpp:24
conscience_utils::Cartography::CC48
@ CC48
Definition: CscCartography.h:24
conscience_utils::Cartography::CC44
@ CC44
Definition: CscCartography.h:20
conscience_utils::Cartography::pictureCoordToGpsPositionWithFOV
CscPoint3d pictureCoordToGpsPositionWithFOV(double latitude, double longitude, double altitudeInMeters, double widthFOV, double heightFOV, double heading, double cameraOrientation, double photoX, double photoY, double imageHeight, double imageWidth)
Definition: CscCartography.cpp:59
Csc3dTypes.h
conscience_utils::Cartography::CscProjectionLambertType
CscProjectionLambertType
Definition: CscCartography.h:17
conscience_server::entities::instance
ServerEntities * instance
Definition: ServerEntities.cpp:39
conscience_utils::Cartography::EPSG9846
@ EPSG9846
Definition: CscCartography.h:58
conscience_utils::Cartography::findPointAtDistanceFrom
CscPoint3d findPointAtDistanceFrom(double latitude, double longitude, double rotationFromNorthRad, double distanceMeters)
Definition: CscCartography.cpp:40
conscience_utils
Definition: CscEntityReflexion.h:50
conscience_utils::Cartography::EPSG3395
@ EPSG3395
Definition: CscCartography.h:63
conscience_utils::Cartography::EPSG9848
@ EPSG9848
Definition: CscCartography.h:60
conscience_utils::Cartography::EPSG9845
@ EPSG9845
Definition: CscCartography.h:57
conscience_utils::Cartography::EPSG9847
@ EPSG9847
Definition: CscCartography.h:59
src
const char * src
Definition: lz4.h:865
conscience_utils::Cartography::EPSG9842
@ EPSG9842
Definition: CscCartography.h:54
conscience_utils::Cartography::EPSG9850
@ EPSG9850
Definition: CscCartography.h:62
conscience_utils::Cartography::CscCartographicProjection
Definition: CscCartography.h:66
conscience_utils::Cartography::projectWGS84toLambertCC
CscPoint3d * projectWGS84toLambertCC(const CscPoint3d *position, const CscProjectionLambertType projection)
Definition: CscCartography.cpp:101
conscience_utils::Cartography::EPSG9844
@ EPSG9844
Definition: CscCartography.h:56
conscience_utils::Cartography::calculatePositionFromGps
CscPoint3d * calculatePositionFromGps(double lat, double lng, double latCornerBLScene, double longCornerBLScene, double latCornerBRScene, double longCornerBRScene, double latCornerTLScene, double longCornerTLScene, double latCornerTRScene, double longCornerTRScene)
Definition: CscCartography.cpp:131