32 #ifndef OGR_SPATIALREF_H_INCLUDED
33 #define OGR_SPATIALREF_H_INCLUDED
81 void RegisterListener(
const std::shared_ptr<Listener>& listener);
97 int FindChild(
const char * )
const;
98 void DestroyChild(
int );
100 void StripNodes(
const char * );
103 void SetValue(
const char * );
105 void MakeValueSafe();
109 OGRErr importFromWkt(
char ** )
111 CPL_WARN_DEPRECATED("Use importFromWkt(const
char**)")
114 OGRErr importFromWkt( const
char ** );
115 OGRErr exportToWkt(
char ** ) const;
116 OGRErr exportToPrettyWkt(
char **,
int = 1) const;
126 int NeedsQuoting() const;
127 OGRErr importFromWkt( const
char **,
int nRecLevel,
int* pnNodes );
129 std::weak_ptr<Listener> m_listener{};
159 std::unique_ptr<Private> d;
161 void GetNormInfo()
const;
163 OGRErr importFromURNPart(
const char* pszAuthority,
167 static CPLString lookupInDict(
const char *pszDictFile,
168 const char *pszCode );
182 int GetReferenceCount()
const;
185 const char* GetName()
const;
191 OGRErr exportToWkt(
char ** )
const;
192 OGRErr exportToWkt(
char ** ppszWKT,
const char*
const* papszOptions )
const;
193 OGRErr exportToPrettyWkt(
char **,
int = FALSE)
const;
194 OGRErr exportToProj4(
char ** )
const;
195 OGRErr exportToPCI(
char **,
char **,
double ** )
const;
196 OGRErr exportToUSGS(
long *,
long *,
double **,
long * )
const;
197 OGRErr exportToXML(
char **,
const char * =
nullptr )
const;
198 OGRErr exportToPanorama(
long *,
long *,
long *,
long *,
200 OGRErr exportToERM(
char *pszProj,
char *pszDatum,
char *pszUnits );
201 OGRErr exportToMICoordSys(
char ** )
const;
204 OGRErr importFromWkt(
char ** )
206 CPL_WARN_DEPRECATED(
"Use importFromWkt(const char**) or importFromWkt(const char*)")
210 OGRErr importFromWkt(
const char ** );
211 OGRErr importFromWkt(
const char* );
212 OGRErr importFromProj4(
const char * );
213 OGRErr importFromEPSG(
int );
214 OGRErr importFromEPSGA(
int );
215 OGRErr importFromESRI(
char ** );
216 OGRErr importFromPCI(
const char *,
const char * =
nullptr,
217 double * =
nullptr );
219 #define USGS_ANGLE_DECIMALDEGREES 0
220 #define USGS_ANGLE_PACKEDDMS TRUE
221 #define USGS_ANGLE_RADIANS 2
222 OGRErr importFromUSGS( long iProjSys, long iZone,
223 double *padfPrjParams,
long iDatum,
225 OGRErr importFromPanorama(
long,
long,
long,
double* );
226 OGRErr importFromOzi(
const char *
const* papszLines );
227 OGRErr importFromWMSAUTO(
const char *pszAutoDef );
228 OGRErr importFromXML(
const char * );
229 OGRErr importFromDict(
const char *pszDict,
const char *pszCode );
230 OGRErr importFromURN(
const char * );
231 OGRErr importFromCRSURL(
const char * );
232 OGRErr importFromERM(
const char *pszProj,
const char *pszDatum,
233 const char *pszUnits );
234 OGRErr importFromUrl(
const char * );
235 OGRErr importFromMICoordSys(
const char * );
241 const char* pszTargetProjection,
242 const char*
const* papszOptions =
nullptr )
const;
247 int EPSGTreatsAsLatLong()
const;
248 int EPSGTreatsAsNorthingEasting()
const;
249 int GetAxesCount()
const;
250 const char *GetAxis(
const char *pszTargetKey,
int iAxis,
252 OGRErr SetAxes(
const char *pszTargetKey,
253 const char *pszXAxisName,
255 const char *pszYAxisName,
260 const std::vector<int>& GetDataAxisToSRSAxisMapping()
const;
261 OGRErr SetDataAxisToSRSAxisMapping(
const std::vector<int>& mapping);
272 const OGR_SRSNode *GetAttrNode(
const char *)
const;
273 const char *GetAttrValue(
const char *,
int = 0)
const;
275 OGRErr SetNode(
const char *,
const char * );
276 OGRErr SetNode(
const char *,
double );
278 OGRErr SetLinearUnitsAndUpdateParameters(
const char *pszName,
280 const char *pszUnitAuthority =
nullptr,
281 const char *pszUnitCode =
nullptr );
282 OGRErr SetLinearUnits(
const char *pszName,
double dfInMeters );
283 OGRErr SetTargetLinearUnits(
const char *pszTargetKey,
286 const char *pszUnitAuthority =
nullptr,
287 const char *pszUnitCode =
nullptr);
289 double GetLinearUnits(
char ** ) const CPL_WARN_DEPRECATED("Use GetLinearUnits(const
char**) instead");
290 double GetLinearUnits( const
char ** =
nullptr ) const;
292 double GetLinearUnits( std::nullptr_t )
const
293 {
return GetLinearUnits( static_cast<const char**>(
nullptr) ); }
296 double GetTargetLinearUnits(
const char *pszTargetKey,
297 char ** ppszRetName )
const
298 CPL_WARN_DEPRECATED(
"Use GetTargetLinearUnits(const char*, const char**)");
299 double GetTargetLinearUnits(
const char *pszTargetKey,
300 const char ** ppszRetName =
nullptr )
const;
302 double GetTargetLinearUnits(
const char *pszTargetKey, std::nullptr_t )
const
303 {
return GetTargetLinearUnits( pszTargetKey, static_cast<const char**>(
nullptr) ); }
306 OGRErr SetAngularUnits(
const char *pszName,
double dfInRadians );
307 double GetAngularUnits(
char ** ) const CPL_WARN_DEPRECATED("Use GetAngularUnits(const
char**) instead");
308 double GetAngularUnits( const
char ** =
nullptr ) const;
310 double GetAngularUnits( std::nullptr_t )
const
311 {
return GetAngularUnits( static_cast<const char**>(
nullptr) ); }
314 double GetPrimeMeridian(
char ** ) const CPL_WARN_DEPRECATED("Use GetPrimeMeridian(const
char**) instead");
315 double GetPrimeMeridian( const
char ** =
nullptr ) const;
317 double GetPrimeMeridian( std::nullptr_t )
const
318 {
return GetPrimeMeridian( static_cast<const char**>(
nullptr) ); }
321 bool IsEmpty()
const;
322 int IsGeographic()
const;
323 int IsProjected()
const;
324 int IsGeocentric()
const;
326 int IsVertical()
const;
327 int IsCompound()
const;
330 const char*
const * papszOptions )
const;
334 const char*
const * papszOptions )
const;
337 OGRErr SetLocalCS(
const char * );
338 OGRErr SetProjCS(
const char * );
339 OGRErr SetProjection(
const char * );
340 OGRErr SetGeocCS(
const char * pszGeocName );
341 OGRErr SetGeogCS(
const char * pszGeogName,
342 const char * pszDatumName,
343 const char * pszEllipsoidName,
344 double dfSemiMajor,
double dfInvFlattening,
345 const char * pszPMName =
nullptr,
346 double dfPMOffset = 0.0,
347 const char * pszUnits =
nullptr,
348 double dfConvertToRadians = 0.0 );
349 OGRErr SetWellKnownGeogCS(
const char * );
351 OGRErr SetVertCS(
const char *pszVertCSName,
352 const char *pszVertDatumName,
353 int nVertDatumClass = 2005 );
354 OGRErr SetCompoundCS(
const char *pszName,
358 OGRErr SetFromUserInput(
const char * );
360 OGRErr SetTOWGS84(
double,
double,
double,
361 double = 0.0,
double = 0.0,
double = 0.0,
363 OGRErr GetTOWGS84(
double *padfCoef,
int nCoeff = 7 )
const;
365 double GetSemiMajor(
OGRErr * =
nullptr )
const;
366 double GetSemiMinor(
OGRErr * =
nullptr )
const;
367 double GetInvFlattening(
OGRErr * =
nullptr )
const;
368 double GetEccentricity()
const;
369 double GetSquaredEccentricity()
const;
371 OGRErr SetAuthority(
const char * pszTargetKey,
372 const char * pszAuthority,
375 OGRErr AutoIdentifyEPSG();
378 int** ppanMatchConfidence )
const;
380 int GetEPSGGeogCS()
const;
382 const char *GetAuthorityCode(
const char * pszTargetKey )
const;
383 const char *GetAuthorityName(
const char * pszTargetKey )
const;
385 bool GetAreaOfUse(
double* pdfWestLongitudeDeg,
386 double* pdfSouthLatitudeDeg,
387 double* pdfEastLongitudeDeg,
388 double* pdfNorthLatitudeDeg,
389 const char **ppszAreaName )
const;
391 const char *GetExtension(
const char *pszTargetKey,
393 const char *pszDefault =
nullptr )
const;
394 OGRErr SetExtension(
const char *pszTargetKey,
396 const char *pszValue );
398 int FindProjParm(
const char *pszParameter,
400 OGRErr SetProjParm(
const char *,
double );
401 double GetProjParm(
const char *,
double =0.0,
OGRErr* =
nullptr )
const;
403 OGRErr SetNormProjParm(
const char *,
double );
404 double GetNormProjParm(
const char *,
double=0.0,
OGRErr* =
nullptr)
const;
406 static int IsAngularParameter(
const char * );
407 static int IsLongitudeParameter(
const char * );
408 static int IsLinearParameter(
const char * );
411 OGRErr SetACEA(
double dfStdP1,
double dfStdP2,
412 double dfCenterLat,
double dfCenterLong,
413 double dfFalseEasting,
double dfFalseNorthing );
416 OGRErr SetAE(
double dfCenterLat,
double dfCenterLong,
417 double dfFalseEasting,
double dfFalseNorthing );
420 OGRErr SetBonne(
double dfStdP1,
double dfCentralMeridian,
421 double dfFalseEasting,
double dfFalseNorthing );
424 OGRErr SetCEA(
double dfStdP1,
double dfCentralMeridian,
425 double dfFalseEasting,
double dfFalseNorthing );
428 OGRErr SetCS(
double dfCenterLat,
double dfCenterLong,
429 double dfFalseEasting,
double dfFalseNorthing );
432 OGRErr SetEC(
double dfStdP1,
double dfStdP2,
433 double dfCenterLat,
double dfCenterLong,
434 double dfFalseEasting,
double dfFalseNorthing );
437 OGRErr SetEckert(
int nVariation,
double dfCentralMeridian,
438 double dfFalseEasting,
double dfFalseNorthing );
441 OGRErr SetEckertIV(
double dfCentralMeridian,
442 double dfFalseEasting,
double dfFalseNorthing );
445 OGRErr SetEckertVI(
double dfCentralMeridian,
446 double dfFalseEasting,
double dfFalseNorthing );
449 OGRErr SetEquirectangular(
double dfCenterLat,
double dfCenterLong,
450 double dfFalseEasting,
double dfFalseNorthing );
452 OGRErr SetEquirectangular2(
double dfCenterLat,
double dfCenterLong,
453 double dfPseudoStdParallel1,
454 double dfFalseEasting,
double dfFalseNorthing );
457 OGRErr SetGEOS(
double dfCentralMeridian,
double dfSatelliteHeight,
458 double dfFalseEasting,
double dfFalseNorthing );
461 OGRErr SetGH(
double dfCentralMeridian,
462 double dfFalseEasting,
double dfFalseNorthing );
468 OGRErr SetGS(
double dfCentralMeridian,
469 double dfFalseEasting,
double dfFalseNorthing );
472 OGRErr SetGaussSchreiberTMercator(
double dfCenterLat,
double dfCenterLong,
474 double dfFalseEasting,
double dfFalseNorthing );
477 OGRErr SetGnomonic(
double dfCenterLat,
double dfCenterLong,
478 double dfFalseEasting,
double dfFalseNorthing );
481 OGRErr SetHOM(
double dfCenterLat,
double dfCenterLong,
482 double dfAzimuth,
double dfRectToSkew,
484 double dfFalseEasting,
double dfFalseNorthing );
487 OGRErr SetHOM2PNO(
double dfCenterLat,
488 double dfLat1,
double dfLong1,
489 double dfLat2,
double dfLong2,
491 double dfFalseEasting,
double dfFalseNorthing );
494 OGRErr SetHOMAC(
double dfCenterLat,
double dfCenterLong,
495 double dfAzimuth,
double dfRectToSkew,
497 double dfFalseEasting,
double dfFalseNorthing );
500 OGRErr SetLOM(
double dfCenterLat,
double dfCenterLong,
503 double dfFalseEasting,
double dfFalseNorthing );
506 OGRErr SetIWMPolyconic(
double dfLat1,
double dfLat2,
508 double dfFalseEasting,
509 double dfFalseNorthing );
512 OGRErr SetKrovak(
double dfCenterLat,
double dfCenterLong,
513 double dfAzimuth,
double dfPseudoStdParallelLat,
515 double dfFalseEasting,
double dfFalseNorthing );
518 OGRErr SetLAEA(
double dfCenterLat,
double dfCenterLong,
519 double dfFalseEasting,
double dfFalseNorthing );
522 OGRErr SetLCC(
double dfStdP1,
double dfStdP2,
523 double dfCenterLat,
double dfCenterLong,
524 double dfFalseEasting,
double dfFalseNorthing );
527 OGRErr SetLCC1SP(
double dfCenterLat,
double dfCenterLong,
529 double dfFalseEasting,
double dfFalseNorthing );
532 OGRErr SetLCCB(
double dfStdP1,
double dfStdP2,
533 double dfCenterLat,
double dfCenterLong,
534 double dfFalseEasting,
double dfFalseNorthing );
537 OGRErr SetMC(
double dfCenterLat,
double dfCenterLong,
538 double dfFalseEasting,
double dfFalseNorthing );
541 OGRErr SetMercator(
double dfCenterLat,
double dfCenterLong,
543 double dfFalseEasting,
double dfFalseNorthing );
546 OGRErr SetMercator2SP(
double dfStdP1,
547 double dfCenterLat,
double dfCenterLong,
548 double dfFalseEasting,
double dfFalseNorthing );
551 OGRErr SetMollweide(
double dfCentralMeridian,
552 double dfFalseEasting,
double dfFalseNorthing );
555 OGRErr SetNZMG(
double dfCenterLat,
double dfCenterLong,
556 double dfFalseEasting,
double dfFalseNorthing );
559 OGRErr SetOS(
double dfOriginLat,
double dfCMeridian,
561 double dfFalseEasting,
double dfFalseNorthing);
564 OGRErr SetOrthographic(
double dfCenterLat,
double dfCenterLong,
565 double dfFalseEasting,
double dfFalseNorthing);
568 OGRErr SetPolyconic(
double dfCenterLat,
double dfCenterLong,
569 double dfFalseEasting,
double dfFalseNorthing );
572 OGRErr SetPS(
double dfCenterLat,
double dfCenterLong,
574 double dfFalseEasting,
double dfFalseNorthing);
577 OGRErr SetRobinson(
double dfCenterLong,
578 double dfFalseEasting,
double dfFalseNorthing );
581 OGRErr SetSinusoidal(
double dfCenterLong,
582 double dfFalseEasting,
double dfFalseNorthing );
585 OGRErr SetStereographic(
double dfCenterLat,
double dfCenterLong,
587 double dfFalseEasting,
double dfFalseNorthing);
590 OGRErr SetSOC(
double dfLatitudeOfOrigin,
double dfCentralMeridian,
591 double dfFalseEasting,
double dfFalseNorthing );
594 OGRErr SetTM(
double dfCenterLat,
double dfCenterLong,
596 double dfFalseEasting,
double dfFalseNorthing );
599 OGRErr SetTMVariant(
const char *pszVariantName,
600 double dfCenterLat,
double dfCenterLong,
602 double dfFalseEasting,
double dfFalseNorthing );
605 OGRErr SetTMG(
double dfCenterLat,
double dfCenterLong,
606 double dfFalseEasting,
double dfFalseNorthing );
609 OGRErr SetTMSO(
double dfCenterLat,
double dfCenterLong,
611 double dfFalseEasting,
double dfFalseNorthing );
614 OGRErr SetTPED(
double dfLat1,
double dfLong1,
615 double dfLat2,
double dfLong2,
616 double dfFalseEasting,
double dfFalseNorthing );
619 OGRErr SetVDG(
double dfCenterLong,
620 double dfFalseEasting,
double dfFalseNorthing );
623 OGRErr SetUTM(
int nZone,
int bNorth = TRUE );
624 int GetUTMZone(
int *pbNorth =
nullptr )
const;
627 OGRErr SetWagner(
int nVariation,
double dfCenterLat,
628 double dfFalseEasting,
double dfFalseNorthing );
631 OGRErr SetQSC(
double dfCenterLat,
double dfCenterLong);
634 OGRErr SetSCH(
double dfPegLat,
double dfPegLong,
635 double dfPegHeading,
double dfPegHgt);
637 OGRErr SetStatePlane(
int nZone,
int bNAD83 = TRUE,
638 const char *pszOverrideUnitName =
nullptr,
639 double dfOverrideUnit = 0.0 );
642 OGRErr ImportFromESRIStatePlaneWKT(
643 int nCode,
const char* pszDatumName,
const char* pszUnitsName,
644 int nPCSCode,
const char* pszCRSName =
nullptr );
647 OGRErr ImportFromESRIWisconsinWKT(
648 const char* pszPrjName,
double dfCentralMeridian,
double dfLatOfOrigin,
649 const char* pszUnitsName,
const char* pszCRSName =
nullptr );
721 int Transform(
int nCount,
722 double *x,
double *y,
double *z =
nullptr,
723 int *pabSuccess =
nullptr );
741 virtual int Transform(
int nCount,
742 double *x,
double *y,
743 double *z,
double *t,
744 int *pabSuccess ) = 0;
773 friend class OGRProjCT;
775 std::unique_ptr<Private> d;
781 bool SetAreaOfInterest(
double dfWestLongitudeDeg,
782 double dfSouthLatitudeDeg,
783 double dfEastLongitudeDeg,
784 double dfNorthLatitudeDeg);
786 bool SetCoordinateOperation(
const char* pszCT,
bool bReverseCT);
788 void SetSourceCenterLong(
double dfCenterLong);
789 void SetTargetCenterLong(
double dfCenterLong);
OSRAxisMappingStrategy
Data axis to CRS axis mapping strategy.
Definition: ogr_srs_api.h:649
Listener that is notified of modification to nodes.
Definition: ogr_spatialref.h:70
Objects of this class are used to represent value nodes in the parsed representation of the WKT SRS f...
Definition: ogr_spatialref.h:66
int IsLeafNode() const
Return whether this is a leaf node.
Definition: ogr_spatialref.h:86
Convenient string class based on std::string.
Definition: cpl_string.h:329
const char * GetValue() const
Fetch value string for this node.
Definition: ogr_spatialref.h:102
Various convenience functions for working with strings and string lists.
void * OGRCoordinateTransformationH
Opaque type for a coordinate transformation object.
Definition: ogr_api.h:76
#define USGS_ANGLE_PACKEDDMS
Angle is in packed degree minute second.
Definition: ogr_spatialref.h:220
void * OGRSpatialReferenceH
Opaque type for a spatial reference system.
Definition: ogr_api.h:74
C spatial reference system services and defines.
OGRAxisOrientation
Axis orientations (corresponds to CS_AxisOrientationEnum).
Definition: ogr_srs_api.h:48
This class represents an OpenGIS Spatial Reference System, and contains methods for converting betwee...
Definition: ogr_spatialref.h:156
static OGRSpatialReferenceH ToHandle(OGRSpatialReference *poSRS)
Convert a OGRSpatialReference* to a OGRSpatialReferenceH.
Definition: ogr_spatialref.h:656
static OGRSpatialReference * FromHandle(OGRSpatialReferenceH hSRS)
Convert a OGRSpatialReferenceH to a OGRSpatialReference*.
Definition: ogr_spatialref.h:662
OGRCoordinateTransformation * OGRCreateCoordinateTransformation(const OGRSpatialReference *poSource, const OGRSpatialReference *poTarget)
Create transformation object.
Definition: ogrct.cpp:439
int OGRErr
Simple container for a bounding region.
Definition: ogr_core.h:290
int GetChildCount() const
Get number of children nodes.
Definition: ogr_spatialref.h:88
#define CPL_DISALLOW_COPY_ASSIGN(ClassName)
Helper to remove the copy and assignment constructors so that the compiler will not generate the defa...
Definition: cpl_port.h:997