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{};
160 std::unique_ptr<Private> d;
162 void GetNormInfo()
const;
164 OGRErr importFromURNPart(
const char* pszAuthority,
168 static CPLString lookupInDict(
const char *pszDictFile,
169 const char *pszCode );
183 int GetReferenceCount()
const;
186 const char* GetName()
const;
192 OGRErr exportToWkt(
char ** )
const;
193 OGRErr exportToWkt(
char ** ppszWKT,
const char*
const* papszOptions )
const;
194 OGRErr exportToPrettyWkt(
char **,
int = FALSE)
const;
196 OGRErr exportToPROJJSON(
char **,
const char*
const* papszOptions )
const;
197 OGRErr exportToProj4(
char ** )
const;
198 OGRErr exportToPCI(
char **,
char **,
double ** )
const;
199 OGRErr exportToUSGS(
long *,
long *,
double **,
long * )
const;
200 OGRErr exportToXML(
char **,
const char * =
nullptr )
const;
201 OGRErr exportToPanorama(
long *,
long *,
long *,
long *,
203 OGRErr exportToERM(
char *pszProj,
char *pszDatum,
char *pszUnits );
204 OGRErr exportToMICoordSys(
char ** )
const;
207 OGRErr importFromWkt(
char ** )
209 CPL_WARN_DEPRECATED(
"Use importFromWkt(const char**) or importFromWkt(const char*)")
213 OGRErr importFromWkt(
const char ** );
214 OGRErr importFromWkt(
const char* );
215 OGRErr importFromProj4(
const char * );
216 OGRErr importFromEPSG(
int );
217 OGRErr importFromEPSGA(
int );
218 OGRErr importFromESRI(
char ** );
219 OGRErr importFromPCI(
const char *,
const char * =
nullptr,
220 double * =
nullptr );
222 #define USGS_ANGLE_DECIMALDEGREES 0
223 #define USGS_ANGLE_PACKEDDMS TRUE
224 #define USGS_ANGLE_RADIANS 2
225 OGRErr importFromUSGS(
long iProjSys,
long iZone,
226 double *padfPrjParams,
long iDatum,
228 OGRErr importFromPanorama(
long,
long,
long,
double* );
229 OGRErr importVertCSFromPanorama(
int );
230 OGRErr importFromOzi(
const char *
const* papszLines );
231 OGRErr importFromWMSAUTO(
const char *pszAutoDef );
232 OGRErr importFromXML(
const char * );
233 OGRErr importFromDict(
const char *pszDict,
const char *pszCode );
234 OGRErr importFromURN(
const char * );
235 OGRErr importFromCRSURL(
const char * );
236 OGRErr importFromERM(
const char *pszProj,
const char *pszDatum,
237 const char *pszUnits );
238 OGRErr importFromUrl(
const char * );
239 OGRErr importFromMICoordSys(
const char * );
245 const char* pszTargetProjection,
246 const char*
const* papszOptions =
nullptr )
const;
251 bool StripTOWGS84IfKnownDatumAndAllowed();
252 bool StripTOWGS84IfKnownDatum();
254 int EPSGTreatsAsLatLong()
const;
255 int EPSGTreatsAsNorthingEasting()
const;
256 int GetAxesCount()
const;
257 const char *GetAxis(
const char *pszTargetKey,
int iAxis,
259 OGRErr SetAxes(
const char *pszTargetKey,
260 const char *pszXAxisName,
262 const char *pszYAxisName,
267 const std::vector<int>& GetDataAxisToSRSAxisMapping()
const;
268 OGRErr SetDataAxisToSRSAxisMapping(
const std::vector<int>& mapping);
279 const OGR_SRSNode *GetAttrNode(
const char *)
const;
280 const char *GetAttrValue(
const char *,
int = 0)
const;
282 OGRErr SetNode(
const char *,
const char * );
283 OGRErr SetNode(
const char *,
double );
285 OGRErr SetLinearUnitsAndUpdateParameters(
const char *pszName,
287 const char *pszUnitAuthority =
nullptr,
288 const char *pszUnitCode =
nullptr );
289 OGRErr SetLinearUnits(
const char *pszName,
double dfInMeters );
290 OGRErr SetTargetLinearUnits(
const char *pszTargetKey,
293 const char *pszUnitAuthority =
nullptr,
294 const char *pszUnitCode =
nullptr);
296 double GetLinearUnits(
char ** )
const
298 CPL_WARN_DEPRECATED(
"Use GetLinearUnits(const char**) instead")
301 double GetLinearUnits(
const char ** =
nullptr )
const;
303 double GetLinearUnits( std::nullptr_t )
const
304 {
return GetLinearUnits(
static_cast<const char**
>(
nullptr) ); }
307 double GetTargetLinearUnits(
const char *pszTargetKey,
308 char ** ppszRetName )
const
310 CPL_WARN_DEPRECATED(
"Use GetTargetLinearUnits(const char*, const char**)")
313 double GetTargetLinearUnits(
const char *pszTargetKey,
314 const char ** ppszRetName =
nullptr )
const;
316 double GetTargetLinearUnits(
const char *pszTargetKey, std::nullptr_t )
const
317 {
return GetTargetLinearUnits( pszTargetKey,
static_cast<const char**
>(
nullptr) ); }
320 OGRErr SetAngularUnits(
const char *pszName,
double dfInRadians );
321 double GetAngularUnits(
char ** )
const
323 CPL_WARN_DEPRECATED(
"Use GetAngularUnits(const char**) instead")
326 double GetAngularUnits(
const char ** =
nullptr )
const;
328 double GetAngularUnits( std::nullptr_t )
const
329 {
return GetAngularUnits(
static_cast<const char**
>(
nullptr) ); }
332 double GetPrimeMeridian(
char ** )
const
334 CPL_WARN_DEPRECATED(
"Use GetPrimeMeridian(const char**) instead")
337 double GetPrimeMeridian(
const char ** =
nullptr )
const;
339 double GetPrimeMeridian( std::nullptr_t )
const
340 {
return GetPrimeMeridian(
static_cast<const char**
>(
nullptr) ); }
343 bool IsEmpty()
const;
344 int IsGeographic()
const;
345 int IsDerivedGeographic()
const;
346 int IsProjected()
const;
347 int IsGeocentric()
const;
349 int IsVertical()
const;
350 int IsCompound()
const;
353 const char*
const * papszOptions )
const;
357 const char*
const * papszOptions )
const;
360 OGRErr SetLocalCS(
const char * );
361 OGRErr SetProjCS(
const char * );
362 OGRErr SetProjection(
const char * );
363 OGRErr SetGeocCS(
const char * pszGeocName );
364 OGRErr SetGeogCS(
const char * pszGeogName,
365 const char * pszDatumName,
366 const char * pszEllipsoidName,
367 double dfSemiMajor,
double dfInvFlattening,
368 const char * pszPMName =
nullptr,
369 double dfPMOffset = 0.0,
370 const char * pszUnits =
nullptr,
371 double dfConvertToRadians = 0.0 );
372 OGRErr SetWellKnownGeogCS(
const char * );
374 OGRErr SetVertCS(
const char *pszVertCSName,
375 const char *pszVertDatumName,
376 int nVertDatumClass = 2005 );
377 OGRErr SetCompoundCS(
const char *pszName,
382 OGRErr PromoteTo3D(
const char* pszName );
384 OGRErr DemoteTo2D(
const char* pszName );
386 OGRErr SetFromUserInput(
const char * );
388 OGRErr SetTOWGS84(
double,
double,
double,
389 double = 0.0,
double = 0.0,
double = 0.0,
391 OGRErr GetTOWGS84(
double *padfCoef,
int nCoeff = 7 )
const;
392 OGRErr AddGuessedTOWGS84();
394 double GetSemiMajor(
OGRErr * =
nullptr )
const;
395 double GetSemiMinor(
OGRErr * =
nullptr )
const;
396 double GetInvFlattening(
OGRErr * =
nullptr )
const;
397 double GetEccentricity()
const;
398 double GetSquaredEccentricity()
const;
400 OGRErr SetAuthority(
const char * pszTargetKey,
401 const char * pszAuthority,
404 OGRErr AutoIdentifyEPSG();
407 int** ppanMatchConfidence )
const;
409 int GetEPSGGeogCS()
const;
411 const char *GetAuthorityCode(
const char * pszTargetKey )
const;
412 const char *GetAuthorityName(
const char * pszTargetKey )
const;
414 bool GetAreaOfUse(
double* pdfWestLongitudeDeg,
415 double* pdfSouthLatitudeDeg,
416 double* pdfEastLongitudeDeg,
417 double* pdfNorthLatitudeDeg,
418 const char **ppszAreaName )
const;
420 const char *GetExtension(
const char *pszTargetKey,
422 const char *pszDefault =
nullptr )
const;
423 OGRErr SetExtension(
const char *pszTargetKey,
425 const char *pszValue );
427 int FindProjParm(
const char *pszParameter,
429 OGRErr SetProjParm(
const char *,
double );
430 double GetProjParm(
const char *,
double =0.0,
OGRErr* =
nullptr )
const;
432 OGRErr SetNormProjParm(
const char *,
double );
433 double GetNormProjParm(
const char *,
double=0.0,
OGRErr* =
nullptr)
const;
435 static int IsAngularParameter(
const char * );
436 static int IsLongitudeParameter(
const char * );
437 static int IsLinearParameter(
const char * );
440 OGRErr SetACEA(
double dfStdP1,
double dfStdP2,
441 double dfCenterLat,
double dfCenterLong,
442 double dfFalseEasting,
double dfFalseNorthing );
445 OGRErr SetAE(
double dfCenterLat,
double dfCenterLong,
446 double dfFalseEasting,
double dfFalseNorthing );
449 OGRErr SetBonne(
double dfStdP1,
double dfCentralMeridian,
450 double dfFalseEasting,
double dfFalseNorthing );
453 OGRErr SetCEA(
double dfStdP1,
double dfCentralMeridian,
454 double dfFalseEasting,
double dfFalseNorthing );
457 OGRErr SetCS(
double dfCenterLat,
double dfCenterLong,
458 double dfFalseEasting,
double dfFalseNorthing );
461 OGRErr SetEC(
double dfStdP1,
double dfStdP2,
462 double dfCenterLat,
double dfCenterLong,
463 double dfFalseEasting,
double dfFalseNorthing );
466 OGRErr SetEckert(
int nVariation,
double dfCentralMeridian,
467 double dfFalseEasting,
double dfFalseNorthing );
470 OGRErr SetEckertIV(
double dfCentralMeridian,
471 double dfFalseEasting,
double dfFalseNorthing );
474 OGRErr SetEckertVI(
double dfCentralMeridian,
475 double dfFalseEasting,
double dfFalseNorthing );
478 OGRErr SetEquirectangular(
double dfCenterLat,
double dfCenterLong,
479 double dfFalseEasting,
double dfFalseNorthing );
481 OGRErr SetEquirectangular2(
double dfCenterLat,
double dfCenterLong,
482 double dfPseudoStdParallel1,
483 double dfFalseEasting,
double dfFalseNorthing );
486 OGRErr SetGEOS(
double dfCentralMeridian,
double dfSatelliteHeight,
487 double dfFalseEasting,
double dfFalseNorthing );
490 OGRErr SetGH(
double dfCentralMeridian,
491 double dfFalseEasting,
double dfFalseNorthing );
497 OGRErr SetGS(
double dfCentralMeridian,
498 double dfFalseEasting,
double dfFalseNorthing );
501 OGRErr SetGaussSchreiberTMercator(
double dfCenterLat,
double dfCenterLong,
503 double dfFalseEasting,
double dfFalseNorthing );
506 OGRErr SetGnomonic(
double dfCenterLat,
double dfCenterLong,
507 double dfFalseEasting,
double dfFalseNorthing );
510 OGRErr SetHOM(
double dfCenterLat,
double dfCenterLong,
511 double dfAzimuth,
double dfRectToSkew,
513 double dfFalseEasting,
double dfFalseNorthing );
516 OGRErr SetHOM2PNO(
double dfCenterLat,
517 double dfLat1,
double dfLong1,
518 double dfLat2,
double dfLong2,
520 double dfFalseEasting,
double dfFalseNorthing );
523 OGRErr SetHOMAC(
double dfCenterLat,
double dfCenterLong,
524 double dfAzimuth,
double dfRectToSkew,
526 double dfFalseEasting,
double dfFalseNorthing );
529 OGRErr SetLOM(
double dfCenterLat,
double dfCenterLong,
532 double dfFalseEasting,
double dfFalseNorthing );
535 OGRErr SetIWMPolyconic(
double dfLat1,
double dfLat2,
537 double dfFalseEasting,
538 double dfFalseNorthing );
541 OGRErr SetKrovak(
double dfCenterLat,
double dfCenterLong,
542 double dfAzimuth,
double dfPseudoStdParallelLat,
544 double dfFalseEasting,
double dfFalseNorthing );
547 OGRErr SetLAEA(
double dfCenterLat,
double dfCenterLong,
548 double dfFalseEasting,
double dfFalseNorthing );
551 OGRErr SetLCC(
double dfStdP1,
double dfStdP2,
552 double dfCenterLat,
double dfCenterLong,
553 double dfFalseEasting,
double dfFalseNorthing );
556 OGRErr SetLCC1SP(
double dfCenterLat,
double dfCenterLong,
558 double dfFalseEasting,
double dfFalseNorthing );
561 OGRErr SetLCCB(
double dfStdP1,
double dfStdP2,
562 double dfCenterLat,
double dfCenterLong,
563 double dfFalseEasting,
double dfFalseNorthing );
566 OGRErr SetMC(
double dfCenterLat,
double dfCenterLong,
567 double dfFalseEasting,
double dfFalseNorthing );
570 OGRErr SetMercator(
double dfCenterLat,
double dfCenterLong,
572 double dfFalseEasting,
double dfFalseNorthing );
575 OGRErr SetMercator2SP(
double dfStdP1,
576 double dfCenterLat,
double dfCenterLong,
577 double dfFalseEasting,
double dfFalseNorthing );
580 OGRErr SetMollweide(
double dfCentralMeridian,
581 double dfFalseEasting,
double dfFalseNorthing );
584 OGRErr SetNZMG(
double dfCenterLat,
double dfCenterLong,
585 double dfFalseEasting,
double dfFalseNorthing );
588 OGRErr SetOS(
double dfOriginLat,
double dfCMeridian,
590 double dfFalseEasting,
double dfFalseNorthing);
593 OGRErr SetOrthographic(
double dfCenterLat,
double dfCenterLong,
594 double dfFalseEasting,
double dfFalseNorthing);
597 OGRErr SetPolyconic(
double dfCenterLat,
double dfCenterLong,
598 double dfFalseEasting,
double dfFalseNorthing );
601 OGRErr SetPS(
double dfCenterLat,
double dfCenterLong,
603 double dfFalseEasting,
double dfFalseNorthing);
606 OGRErr SetRobinson(
double dfCenterLong,
607 double dfFalseEasting,
double dfFalseNorthing );
610 OGRErr SetSinusoidal(
double dfCenterLong,
611 double dfFalseEasting,
double dfFalseNorthing );
614 OGRErr SetStereographic(
double dfCenterLat,
double dfCenterLong,
616 double dfFalseEasting,
double dfFalseNorthing);
619 OGRErr SetSOC(
double dfLatitudeOfOrigin,
double dfCentralMeridian,
620 double dfFalseEasting,
double dfFalseNorthing );
623 OGRErr SetTM(
double dfCenterLat,
double dfCenterLong,
625 double dfFalseEasting,
double dfFalseNorthing );
628 OGRErr SetTMVariant(
const char *pszVariantName,
629 double dfCenterLat,
double dfCenterLong,
631 double dfFalseEasting,
double dfFalseNorthing );
634 OGRErr SetTMG(
double dfCenterLat,
double dfCenterLong,
635 double dfFalseEasting,
double dfFalseNorthing );
638 OGRErr SetTMSO(
double dfCenterLat,
double dfCenterLong,
640 double dfFalseEasting,
double dfFalseNorthing );
643 OGRErr SetTPED(
double dfLat1,
double dfLong1,
644 double dfLat2,
double dfLong2,
645 double dfFalseEasting,
double dfFalseNorthing );
648 OGRErr SetVDG(
double dfCenterLong,
649 double dfFalseEasting,
double dfFalseNorthing );
652 OGRErr SetUTM(
int nZone,
int bNorth = TRUE );
653 int GetUTMZone(
int *pbNorth =
nullptr )
const;
656 OGRErr SetWagner(
int nVariation,
double dfCenterLat,
657 double dfFalseEasting,
double dfFalseNorthing );
660 OGRErr SetQSC(
double dfCenterLat,
double dfCenterLong);
663 OGRErr SetSCH(
double dfPegLat,
double dfPegLong,
664 double dfPegHeading,
double dfPegHgt);
667 OGRErr SetVerticalPerspective(
double dfTopoOriginLat,
668 double dfTopoOriginLon,
669 double dfTopoOriginHeight,
670 double dfViewPointHeight,
671 double dfFalseEasting,
672 double dfFalseNorthing);
675 OGRErr SetDerivedGeogCRSWithPoleRotationGRIBConvention(
676 const char* pszCRSName,
677 double dfSouthPoleLat,
678 double dfSouthPoleLon,
679 double dfAxisRotation );
682 OGRErr SetStatePlane(
int nZone,
int bNAD83 = TRUE,
683 const char *pszOverrideUnitName =
nullptr,
684 double dfOverrideUnit = 0.0 );
687 OGRErr ImportFromESRIStatePlaneWKT(
688 int nCode,
const char* pszDatumName,
const char* pszUnitsName,
689 int nPCSCode,
const char* pszCRSName =
nullptr );
692 OGRErr ImportFromESRIWisconsinWKT(
693 const char* pszPrjName,
double dfCentralMeridian,
double dfLatOfOrigin,
694 const char* pszUnitsName,
const char* pszCRSName =
nullptr );
697 void UpdateCoordinateSystemFromGeogCRS();
771 double *x,
double *y,
double *z =
nullptr,
772 int *pabSuccess =
nullptr );
791 double *x,
double *y,
792 double *z,
double *t,
793 int *pabSuccess ) = 0;
828 friend class OGRProjCT;
830 std::unique_ptr<Private> d;
839 bool SetAreaOfInterest(
double dfWestLongitudeDeg,
840 double dfSouthLatitudeDeg,
841 double dfEastLongitudeDeg,
842 double dfNorthLatitudeDeg);
844 bool SetCoordinateOperation(
const char* pszCT,
bool bReverseCT);
846 void SetSourceCenterLong(
double dfCenterLong);
847 void SetTargetCenterLong(
double dfCenterLong);
Convenient string class based on std::string.
Definition: cpl_string.h:333
This class represents an OpenGIS Spatial Reference System, and contains methods for converting betwee...
Definition: ogr_spatialref.h:158
static OGRSpatialReference * FromHandle(OGRSpatialReferenceH hSRS)
Convert a OGRSpatialReferenceH to a OGRSpatialReference*.
Definition: ogr_spatialref.h:711
static OGRSpatialReferenceH ToHandle(OGRSpatialReference *poSRS)
Convert a OGRSpatialReference* to a OGRSpatialReferenceH.
Definition: ogr_spatialref.h:705
Objects of this class are used to represent value nodes in the parsed representation of the WKT SRS f...
Definition: ogr_spatialref.h:67
int GetChildCount() const
Get number of children nodes.
Definition: ogr_spatialref.h:88
const char * GetValue() const
Fetch value string for this node.
Definition: ogr_spatialref.h:102
int IsLeafNode() const
Return whether this is a leaf node.
Definition: ogr_spatialref.h:86
#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:1007
Various convenience functions for working with strings and string lists.
void * OGRCoordinateTransformationH
Opaque type for a coordinate transformation object.
Definition: ogr_api.h:77
void * OGRSpatialReferenceH
Opaque type for a spatial reference system.
Definition: ogr_api.h:75
int OGRErr
Type for a OGR error.
Definition: ogr_core.h:318
#define USGS_ANGLE_PACKEDDMS
Angle is in packed degree minute second.
Definition: ogr_spatialref.h:223
OGRCoordinateTransformation * OGRCreateCoordinateTransformation(const OGRSpatialReference *poSource, const OGRSpatialReference *poTarget)
Create transformation object.
Definition: ogrct.cpp:508
C spatial reference system services and defines.
OSRAxisMappingStrategy
Data axis to CRS axis mapping strategy.
Definition: ogr_srs_api.h:660
OGRAxisOrientation
Axis orientations (corresponds to CS_AxisOrientationEnum).
Definition: ogr_srs_api.h:48
Listener that is notified of modification to nodes.
Definition: ogr_spatialref.h:71
virtual void notifyChange(OGR_SRSNode *)=0
Method triggered when a node is modified.