29 #ifndef CRS_HH_INCLUDED 30 #define CRS_HH_INCLUDED 37 #include "coordinateoperation.hpp" 38 #include "coordinatesystem.hpp" 75 using CRSPtr = std::shared_ptr<CRS>;
87 PROJ_DLL ~
CRS()
override;
97 PROJ_DLL
CRSNNPtr stripVerticalComponent()
const;
100 PROJ_DLL
virtual CRSNNPtr shallowClone()
const = 0;
102 PROJ_DLL
const BoundCRSPtr &canonicalBoundCRS() PROJ_CONST_DECL;
107 extractGeodeticCRSRaw()
const;
117 PROJ_OPAQUE_PRIVATE_DATA
137 coordinateSystem() PROJ_CONST_DECL;
154 util::IComparable::Criterion::STRICT)
const;
157 PROJ_OPAQUE_PRIVATE_DATA
197 PROJ_DLL
const std::vector<operation::PointMotionOperationNNPtr> &
198 velocityModel() PROJ_CONST_DECL;
202 PROJ_DLL
bool isGeocentric() PROJ_CONST_DECL;
229 util::IComparable::Criterion::STRICT)
const override;
231 PROJ_DLL
CRSNNPtr shallowClone()
const override;
240 void addGeocentricUnitConversionIntoPROJString(
267 PROJ_OPAQUE_PRIVATE_DATA
311 PROJ_DLL
CRSNNPtr shallowClone()
const override;
316 addAngularUnitConvertAndAxisSwap(
339 PROJ_OPAQUE_PRIVATE_DATA
370 PROJ_DLL
const std::vector<operation::TransformationNNPtr> &
371 geoidModel() PROJ_CONST_DECL;
372 PROJ_DLL
const std::vector<operation::PointMotionOperationNNPtr> &
373 velocityModel() PROJ_CONST_DECL;
378 util::IComparable::Criterion::STRICT)
const override;
391 PROJ_DLL
CRSNNPtr shallowClone()
const override;
415 PROJ_OPAQUE_PRIVATE_DATA
445 util::IComparable::Criterion::STRICT)
const override;
449 derivingConversionRef() PROJ_CONST_DECL;
458 void setDerivingConversionCRS();
460 void baseExportToPROJString(
463 void baseExportToWKT(
465 const std::string &baseKeyword)
const;
468 PROJ_OPAQUE_PRIVATE_DATA
515 util::IComparable::Criterion::STRICT)
const override;
517 PROJ_DLL
CRSNNPtr shallowClone()
const override;
523 bool axisSpecFound)
const;
542 PROJ_OPAQUE_PRIVATE_DATA
582 util::IComparable::Criterion::STRICT)
const override;
584 PROJ_DLL
CRSNNPtr shallowClone()
const override;
594 PROJ_OPAQUE_PRIVATE_DATA
639 util::IComparable::Criterion::STRICT)
const override;
641 PROJ_DLL
CRSNNPtr shallowClone()
const override;
651 PROJ_OPAQUE_PRIVATE_DATA
695 util::IComparable::Criterion::STRICT)
const override;
697 PROJ_DLL
CRSNNPtr shallowClone()
const override;
707 PROJ_OPAQUE_PRIVATE_DATA
738 PROJ_DLL
const std::vector<CRSNNPtr> &
739 componentReferenceSystems() PROJ_CONST_DECL;
749 util::IComparable::Criterion::STRICT)
const override;
753 const std::vector<CRSNNPtr> &components);
755 PROJ_DLL
CRSNNPtr shallowClone()
const override;
759 explicit CompoundCRS(
const std::vector<CRSNNPtr> &components);
768 PROJ_OPAQUE_PRIVATE_DATA
805 PROJ_DLL
const CRSNNPtr &baseCRS() PROJ_CONST_DECL;
806 PROJ_DLL
CRSNNPtr baseCRSWithCanonicalBoundCRS()
const;
808 PROJ_DLL
const CRSNNPtr &hubCRS() PROJ_CONST_DECL;
810 transformation() PROJ_CONST_DECL;
820 util::IComparable::Criterion::STRICT)
const override;
827 createFromTOWGS84(
const CRSNNPtr &baseCRSIn,
828 const std::vector<double> &TOWGS84Parameters);
831 createFromNadgrids(
const CRSNNPtr &baseCRSIn,
const std::string &filename);
833 PROJ_DLL
CRSNNPtr shallowClone()
const override;
845 bool isTOWGS84Compatible()
const;
846 std::string getHDatumPROJ4GRIDS()
const;
847 std::string getVDatumPROJ4GRIDS()
const;
850 PROJ_OPAQUE_PRIVATE_DATA
897 util::IComparable::Criterion::STRICT)
const override;
899 PROJ_DLL
CRSNNPtr shallowClone()
const override;
916 PROJ_OPAQUE_PRIVATE_DATA
959 util::IComparable::Criterion::STRICT)
const override;
961 PROJ_DLL
CRSNNPtr shallowClone()
const override;
975 PROJ_OPAQUE_PRIVATE_DATA
1019 util::IComparable::Criterion::STRICT)
const override;
1021 PROJ_DLL
CRSNNPtr shallowClone()
const override;
1035 PROJ_OPAQUE_PRIVATE_DATA
1075 util::IComparable::Criterion::STRICT)
const override;
1077 PROJ_DLL
CRSNNPtr shallowClone()
const override;
1091 PROJ_OPAQUE_PRIVATE_DATA
1099 template <
class DerivedCRSTraits>
1104 typedef typename DerivedCRSTraits::BaseType BaseType;
1106 typedef typename DerivedCRSTraits::CSType CSType;
1114 typedef typename util::nn<std::shared_ptr<DerivedCRSTemplate>>
NNPtr;
1118 typedef util::nn<std::shared_ptr<CSType>>
CSNNPtr;
1124 PROJ_DLL
const BaseNNPtr baseCRS()
const;
1138 PROJ_DLL
static NNPtr
1141 const CSNNPtr &csIn);
1150 util::IComparable::Criterion::STRICT)
const override;
1152 PROJ_DLL
CRSNNPtr shallowClone()
const override;
1158 const CSNNPtr &csIn);
1164 PROJ_OPAQUE_PRIVATE_DATA
1171 struct DerivedEngineeringCRSTraits {
1176 inline static const std::string &CRSName();
1177 inline static const std::string &WKTKeyword();
1178 inline static const std::string &WKTBaseKeyword();
1179 static const bool wkt2_2018_only =
true;
1190 #ifdef DOXYGEN_ENABLED 1197 #ifndef DO_NOT_DEFINE_EXTERN_DERIVED_CRS_TEMPLATE 1209 struct DerivedParametricCRSTraits {
1214 inline static const std::string &CRSName();
1215 inline static const std::string &WKTKeyword();
1216 inline static const std::string &WKTBaseKeyword();
1217 static const bool wkt2_2018_only =
false;
1227 #ifdef DOXYGEN_ENABLED 1234 #ifndef DO_NOT_DEFINE_EXTERN_DERIVED_CRS_TEMPLATE 1246 struct DerivedTemporalCRSTraits {
1251 inline static const std::string &CRSName();
1252 inline static const std::string &WKTKeyword();
1253 inline static const std::string &WKTBaseKeyword();
1254 static const bool wkt2_2018_only =
false;
1264 #ifdef DOXYGEN_ENABLED 1271 #ifndef DO_NOT_DEFINE_EXTERN_DERIVED_CRS_TEMPLATE 1286 #endif // CRS_HH_INCLUDED util::nn< EllipsoidPtr > EllipsoidNNPtr
Definition: datum.hpp:233
std::shared_ptr< DerivedCRS > DerivedCRSPtr
Definition: crs.hpp:473
A coordinate reference system having a vertical reference frame and a one-dimensional vertical coordi...
Definition: crs.hpp:362
std::shared_ptr< TemporalCRS > TemporalCRSPtr
Definition: crs.hpp:550
static const GeographicCRSNNPtr EPSG_4267
EPSG:4267 / "NAD27" 2D GeographicCRS.
Definition: crs.hpp:304
Interface for an object that can be compared to another.
Definition: util.hpp:292
static const GeographicCRSNNPtr EPSG_4807
EPSG:4807 / "NTF (Paris)" 2D GeographicCRS.
Definition: crs.hpp:308
std::shared_ptr< GeodeticReferenceFrame > GeodeticReferenceFramePtr
Definition: datum.hpp:348
util::nn< TemporalCSPtr > TemporalCSNNPtr
Definition: coordinatesystem.hpp:540
A derived coordinate reference system which has either a geodetic or a geographic coordinate referenc...
Definition: crs.hpp:937
util::nn< DerivedParametricCRSPtr > DerivedParametricCRSNNPtr
Definition: crs.hpp:1241
Abstract class modelling a coordinate system (CS)
Definition: coordinatesystem.hpp:232
(Abstract class) A one-dimensional coordinate system used to record time.
Definition: coordinatesystem.hpp:549
std::shared_ptr< VerticalReferenceFrame > VerticalReferenceFramePtr
Definition: datum.hpp:512
util::nn< std::shared_ptr< BaseType > > BaseNNPtr
Definition: crs.hpp:1116
std::shared_ptr< VerticalCRS > VerticalCRSPtr
Definition: crs.hpp:61
std::shared_ptr< EngineeringCRS > EngineeringCRSPtr
Definition: crs.hpp:602
util::nn< CoordinateSystemPtr > CoordinateSystemNNPtr
Definition: coordinatesystem.hpp:268
Contextually local coordinate reference system associated with an engineering datum.
Definition: crs.hpp:672
util::nn< std::shared_ptr< DerivedCRSTemplate > > NNPtr
Definition: crs.hpp:1114
std::shared_ptr< SingleCRS > SingleCRSPtr
Definition: crs.hpp:162
Usage of a CRS-related object.
Definition: common.hpp:399
std::shared_ptr< CRS > CRSPtr
Definition: coordinateoperation.hpp:45
util::nn< VerticalCSPtr > VerticalCSNNPtr
Definition: coordinatesystem.hpp:384
A coordinate reference system associated with a geodetic reference frame and a three-dimensional Cart...
Definition: crs.hpp:183
util::nn< CompoundCRSPtr > CompoundCRSNNPtr
Definition: crs.hpp:717
A derived coordinate reference system which has a vertical coordinate reference system as its base CR...
Definition: crs.hpp:1053
std::shared_ptr< CompoundCRS > CompoundCRSPtr
Definition: crs.hpp:715
Template representing a derived coordinate reference system.
Definition: crs.hpp:1100
std::shared_ptr< Datum > DatumPtr
Definition: datum.hpp:97
one-dimensional coordinate reference system which uses parameter values or functions that may vary mo...
Definition: coordinatesystem.hpp:514
util::nn< GeodeticCRSPtr > GeodeticCRSNNPtr
Definition: crs.hpp:172
std::shared_ptr< BoundCRS > BoundCRSPtr
Definition: crs.hpp:67
util::nn< ParametricCSPtr > ParametricCSNNPtr
Definition: coordinatesystem.hpp:507
A coordinate reference system associated with a geodetic reference frame and a two- or three-dimensio...
Definition: crs.hpp:283
Abstract class modelling a coordinate reference system which is usually single but may be compound...
Definition: crs.hpp:84
static const GeographicCRSNNPtr EPSG_4326
EPSG:4326 / "WGS 84" 2D GeographicCRS.
Definition: crs.hpp:306
Criterion
Comparison criterion.
Definition: util.hpp:299
util::nn< PrimeMeridianPtr > PrimeMeridianNNPtr
Definition: datum.hpp:163
std::shared_ptr< DerivedGeographicCRS > DerivedGeographicCRSPtr
Definition: crs.hpp:924
static const GeographicCRSNNPtr EPSG_4979
EPSG:4979 / "WGS 84" 3D GeographicCRS.
Definition: crs.hpp:309
util::nn< SingleCRSPtr > SingleCRSNNPtr
Definition: crs.hpp:164
util::nn< DerivedCRSPtr > DerivedCRSNNPtr
Definition: crs.hpp:475
Abstract class modelling a single coordinate reference system that is defined through the application...
Definition: crs.hpp:433
util::nn< VerticalReferenceFramePtr > VerticalReferenceFrameNNPtr
Definition: datum.hpp:514
std::shared_ptr< GeodeticCRS > GeodeticCRSPtr
Definition: crs.hpp:170
util::nn< ProjectedCRSPtr > ProjectedCRSNNPtr
Definition: crs.hpp:483
util::nn< EngineeringDatumPtr > EngineeringDatumNNPtr
Definition: datum.hpp:682
A derived coordinate reference system which has either a geodetic or a geographic coordinate referenc...
Definition: crs.hpp:869
A coordinate reference system describing the position of points through two or more independent singl...
Definition: crs.hpp:732
util::nn< DerivedGeodeticCRSPtr > DerivedGeodeticCRSNNPtr
Definition: crs.hpp:860
A derived coordinate reference system which has an engineering coordinate reference system as its bas...
Definition: crs.hpp:1191
util::nn< DerivedEngineeringCRSPtr > DerivedEngineeringCRSNNPtr
Definition: crs.hpp:1204
std::shared_ptr< DerivedParametricCRS > DerivedParametricCRSPtr
Definition: crs.hpp:1239
util::nn< CRSPtr > CRSNNPtr
Definition: coordinateoperation.hpp:46
util::nn< SphericalCSPtr > SphericalCSNNPtr
Definition: coordinatesystem.hpp:276
A derived coordinate reference system which has a projected coordinate reference system as its base C...
Definition: crs.hpp:996
util::nn< BoundCRSPtr > BoundCRSNNPtr
Definition: crs.hpp:69
std::shared_ptr< DatabaseContext > DatabaseContextPtr
Definition: io.hpp:126
Wrapper of a std::map<std::string, BaseObjectNNPtr>
Definition: util.hpp:410
std::shared_ptr< DerivedProjectedCRS > DerivedProjectedCRSPtr
Definition: crs.hpp:983
std::shared_ptr< ParametricCRS > ParametricCRSPtr
Definition: crs.hpp:659
Abstract class modelling a coordinate reference system consisting of one Coordinate System and either...
Definition: crs.hpp:128
A coordinate reference system with an associated transformation to a target/hub CRS.
Definition: crs.hpp:799
A derived coordinate reference system which has a geodetic (usually geographic) coordinate reference ...
Definition: crs.hpp:497
A coordinate reference system associated with a temporal datum and a one-dimensional temporal coordin...
Definition: crs.hpp:559
Contextually local coordinate reference system associated with an engineering datum.
Definition: crs.hpp:618
util::nn< TemporalCRSPtr > TemporalCRSNNPtr
Definition: crs.hpp:552
util::nn< std::shared_ptr< CSType > > CSNNPtr
Definition: crs.hpp:1118
util::nn< TransformationPtr > TransformationNNPtr
Definition: coordinateoperation.hpp:1277
Interface for an object that can be exported to a PROJ string.
Definition: io.hpp:451
util::nn< ParametricDatumPtr > ParametricDatumNNPtr
Definition: datum.hpp:729
static const GeodeticCRSNNPtr EPSG_4978
EPSG:4978 / "WGS 84" Geocentric.
Definition: crs.hpp:233
util::nn< ParametricCRSPtr > ParametricCRSNNPtr
Definition: crs.hpp:661
util::nn< GeodeticReferenceFramePtr > GeodeticReferenceFrameNNPtr
Definition: datum.hpp:350
util::nn< DerivedProjectedCRSPtr > DerivedProjectedCRSNNPtr
Definition: crs.hpp:985
util::nn< DerivedTemporalCRSPtr > DerivedTemporalCRSNNPtr
Definition: crs.hpp:1278
std::shared_ptr< DerivedVerticalCRS > DerivedVerticalCRSPtr
Definition: crs.hpp:1043
std::shared_ptr< DerivedGeodeticCRS > DerivedGeodeticCRSPtr
Definition: crs.hpp:858
util::nn< GeographicCRSPtr > GeographicCRSNNPtr
Definition: crs.hpp:57
util::nn< CartesianCSPtr > CartesianCSNNPtr
Definition: coordinatesystem.hpp:423
util::nn< TemporalDatumPtr > TemporalDatumNNPtr
Definition: datum.hpp:633
std::shared_ptr< DatumEnsemble > DatumEnsemblePtr
Definition: datum.hpp:105
util::nn< EngineeringCRSPtr > EngineeringCRSNNPtr
Definition: crs.hpp:604
util::nn< VerticalCRSPtr > VerticalCRSNNPtr
Definition: crs.hpp:63
Interface for an object that can be exported to WKT.
Definition: io.hpp:423
util::nn< DerivedVerticalCRSPtr > DerivedVerticalCRSNNPtr
Definition: crs.hpp:1045
std::shared_ptr< DerivedEngineeringCRS > DerivedEngineeringCRSPtr
Definition: crs.hpp:1202
static const GeographicCRSNNPtr OGC_CRS84
OGC:CRS84 / "CRS 84" 2D GeographicCRS (long, lat)
Definition: crs.hpp:307
std::shared_ptr< GeographicCRS > GeographicCRSPtr
Definition: crs.hpp:55
A derived coordinate reference system which has a temporal coordinate reference system as its base CR...
Definition: crs.hpp:1265
util::nn< ConversionPtr > ConversionNNPtr
Definition: coordinateoperation.hpp:581
util::nn< EllipsoidalCSPtr > EllipsoidalCSNNPtr
Definition: coordinatesystem.hpp:317
std::shared_ptr< DerivedTemporalCRS > DerivedTemporalCRSPtr
Definition: crs.hpp:1276
A derived coordinate reference system which has a parametric coordinate reference system as its base ...
Definition: crs.hpp:1228
static const GeographicCRSNNPtr EPSG_4269
EPSG:4269 / "NAD83" 2D GeographicCRS.
Definition: crs.hpp:305
std::shared_ptr< ProjectedCRS > ProjectedCRSPtr
Definition: crs.hpp:481
util::nn< DerivedGeographicCRSPtr > DerivedGeographicCRSNNPtr
Definition: crs.hpp:926