- Main Page
- Related Pages
- Classes
- Files
- Directories

# ogr_spatialref.h

Go to the documentation of this file.

    00001 /******************************************************************************
    00002  * $Id: ogr_spatialref.h 22952 2011-08-19 21:08:31Z rouault $
    00003  *
    00004  * Project:  OpenGIS Simple Features Reference Implementation
    00005  * Purpose:  Classes for manipulating spatial reference systems in a
    00006  *           platform non-specific manner.
    00007  * Author:   Frank Warmerdam, warmerdam@pobox.com
    00008  *
    00009  ******************************************************************************
    00010  * Copyright (c) 1999,  Les Technologies SoftMap Inc.
    00011  *
    00012  * Permission is hereby granted, free of charge, to any person obtaining a
    00013  * copy of this software and associated documentation files (the "Software"),
    00014  * to deal in the Software without restriction, including without limitation
    00015  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
    00016  * and/or sell copies of the Software, and to permit persons to whom the
    00017  * Software is furnished to do so, subject to the following conditions:
    00018  *
    00019  * The above copyright notice and this permission notice shall be included
    00020  * in all copies or substantial portions of the Software.
    00021  *
    00022  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
    00023  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    00024  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
    00025  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    00026  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
    00027  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
    00028  * DEALINGS IN THE SOFTWARE.
    00029  ****************************************************************************/
    00030
    00031 #ifndef _OGR_SPATIALREF_H_INCLUDED
    00032 #define _OGR_SPATIALREF_H_INCLUDED
    00033
    00034 #include "ogr_srs_api.h"
    00035
    00042 /************************************************************************/
    00043 /*                             OGR_SRSNode                              */
    00044 /************************************************************************/
    00045
    00059 class CPL_DLL OGR_SRSNode
    00060 {
    00061     char        *pszValue;
    00062
    00063     OGR_SRSNode **papoChildNodes;
    00064     OGR_SRSNode *poParent;
    00065
    00066     int         nChildren;
    00067
    00068     int         NeedsQuoting() const;
    00069
    00070   public:
    00071                 OGR_SRSNode(const char * = NULL);
    00072                 ~OGR_SRSNode();
    00073
    00074     int         IsLeafNode() const { return nChildren == 0; }
    00075
    00076     int         GetChildCount() const { return nChildren; }
    00077     OGR_SRSNode *GetChild( int );
    00078     const OGR_SRSNode *GetChild( int ) const;
    00079
    00080     OGR_SRSNode *GetNode( const char * );
    00081     const OGR_SRSNode *GetNode( const char * ) const;
    00082
    00083     void        InsertChild( OGR_SRSNode *, int );
    00084     void        AddChild( OGR_SRSNode * );
    00085     int         FindChild( const char * ) const;
    00086     void        DestroyChild( int );
    00087     void        ClearChildren();
    00088     void        StripNodes( const char * );
    00089
    00090     const char  *GetValue() const { return pszValue; }
    00091     void        SetValue( const char * );
    00092
    00093     void        MakeValueSafe();
    00094     OGRErr      FixupOrdering();
    00095
    00096     OGR_SRSNode *Clone() const;
    00097
    00098     OGRErr      importFromWkt( char ** );
    00099     OGRErr      exportToWkt( char ** ) const;
    00100     OGRErr      exportToPrettyWkt( char **, int = 1) const;
    00101
    00102     OGRErr      applyRemapper( const char *pszNode,
    00103                                char **papszSrcValues,
    00104                                char **papszDstValues,
    00105                                int nStepSize = 1,
    00106                                int bChildOfHit = FALSE );
    00107 };
    00108
    00109 /************************************************************************/
    00110 /*                         OGRSpatialReference                          */
    00111 /************************************************************************/
    00112
    00127 class CPL_DLL OGRSpatialReference
    00128 {
    00129     double      dfFromGreenwich;
    00130     double      dfToMeter;
    00131     double      dfToDegrees;
    00132
    00133     OGR_SRSNode *poRoot;
    00134
    00135     int         nRefCount;
    00136     int         bNormInfoSet;
    00137
    00138     static OGRErr Validate(OGR_SRSNode *poRoot);
    00139     static OGRErr ValidateAuthority(OGR_SRSNode *poRoot);
    00140     static OGRErr ValidateAxis(OGR_SRSNode *poRoot);
    00141     static OGRErr ValidateUnit(OGR_SRSNode *poRoot);
    00142     static OGRErr ValidateVertDatum(OGR_SRSNode *poRoot);
    00143     static OGRErr ValidateProjection( OGR_SRSNode* poRoot );
    00144     static int  IsAliasFor( const char *, const char * );
    00145     void        GetNormInfo() const;
    00146
    00147     OGRErr      importFromURNPart(const char* pszAuthority,
    00148                                   const char* pszCode,
    00149                                   const char* pszURN);
    00150   public:
    00151                 OGRSpatialReference(const OGRSpatialReference&);
    00152                 OGRSpatialReference(const char * = NULL);
    00153
    00154     virtual    ~OGRSpatialReference();
    00155
    00156     static void DestroySpatialReference(OGRSpatialReference* poSRS);
    00157
    00158     OGRSpatialReference &operator=(const OGRSpatialReference&);
    00159
    00160     int         Reference();
    00161     int         Dereference();
    00162     int         GetReferenceCount() const { return nRefCount; }
    00163     void        Release();
    00164
    00165     OGRSpatialReference *Clone() const;
    00166     OGRSpatialReference *CloneGeogCS() const;
    00167
    00168     OGRErr      exportToWkt( char ** ) const;
    00169     OGRErr      exportToPrettyWkt( char **, int = FALSE) const;
    00170     OGRErr      exportToProj4( char ** ) const;
    00171     OGRErr      exportToPCI( char **, char **, double ** ) const;
    00172     OGRErr      exportToUSGS( long *, long *, double **, long * ) const;
    00173     OGRErr      exportToXML( char **, const char * = NULL ) const;
    00174     OGRErr      exportToPanorama( long *, long *, long *, long *,
    00175                                   double * ) const;
    00176     OGRErr      exportToERM( char *pszProj, char *pszDatum, char *pszUnits );
    00177     OGRErr      exportToMICoordSys( char ** ) const;
    00178
    00179     OGRErr      importFromWkt( char ** );
    00180     OGRErr      importFromProj4( const char * );
    00181     OGRErr      importFromEPSG( int );
    00182     OGRErr      importFromEPSGA( int );
    00183     OGRErr      importFromESRI( char ** );
    00184     OGRErr      importFromPCI( const char *, const char * = NULL,
    00185                                double * = NULL );
    00186     OGRErr      importFromUSGS( long iProjSys, long iZone,
    00187                                 double *padfPrjParams,
    00188                                 long iDatum, int bAnglesInPackedDMSFormat = TRUE );
    00189     OGRErr      importFromPanorama( long, long, long, double* );
    00190     OGRErr      importFromOzi( const char *, const char *, const char * );
    00191     OGRErr      importFromWMSAUTO( const char *pszAutoDef );
    00192     OGRErr      importFromXML( const char * );
    00193     OGRErr      importFromDict( const char *pszDict, const char *pszCode );
    00194     OGRErr      importFromURN( const char * );
    00195     OGRErr      importFromERM( const char *pszProj, const char *pszDatum,
    00196                                const char *pszUnits );
    00197     OGRErr      importFromUrl( const char * );
    00198     OGRErr      importFromMICoordSys( const char * );
    00199
    00200     OGRErr      morphToESRI();
    00201     OGRErr      morphFromESRI();
    00202
    00203     OGRErr      Validate();
    00204     OGRErr      StripCTParms( OGR_SRSNode * = NULL );
    00205     OGRErr      StripVertical();
    00206     OGRErr      FixupOrdering();
    00207     OGRErr      Fixup();
    00208
    00209     int         EPSGTreatsAsLatLong();
    00210     const char *GetAxis( const char *pszTargetKey, int iAxis,
    00211                          OGRAxisOrientation *peOrientation ) const;
    00212     OGRErr      SetAxes( const char *pszTargetKey,
    00213                          const char *pszXAxisName,
    00214                          OGRAxisOrientation eXAxisOrientation,
    00215                          const char *pszYAxisName,
    00216                          OGRAxisOrientation eYAxisOrientation );
    00217
    00218     // Machinary for accessing parse nodes
    00219     OGR_SRSNode *GetRoot() { return poRoot; }
    00220     const OGR_SRSNode *GetRoot() const { return poRoot; }
    00221     void        SetRoot( OGR_SRSNode * );
    00222
    00223     OGR_SRSNode *GetAttrNode(const char *);
    00224     const OGR_SRSNode *GetAttrNode(const char *) const;
    00225     const char  *GetAttrValue(const char *, int = 0) const;
    00226
    00227     OGRErr      SetNode( const char *, const char * );
    00228     OGRErr      SetNode( const char *, double );
    00229
    00230     OGRErr      SetLinearUnitsAndUpdateParameters( const char *pszName,
    00231                                                    double dfInMeters );
    00232     OGRErr      SetLinearUnits( const char *pszName, double dfInMeters );
    00233     OGRErr      SetTargetLinearUnits( const char *pszTargetKey,
    00234                                       const char *pszName, double dfInMeters );
    00235     double      GetLinearUnits( char ** = NULL ) const;
    00236     double      GetTargetLinearUnits( const char *pszTargetKey,
    00237                                       char ** ppszRetName = NULL ) const;
    00238
    00239     OGRErr      SetAngularUnits( const char *pszName, double dfInRadians );
    00240     double      GetAngularUnits( char ** = NULL ) const;
    00241
    00242     double      GetPrimeMeridian( char ** = NULL ) const;
    00243
    00244     int         IsGeographic() const;
    00245     int         IsProjected() const;
    00246     int         IsGeocentric() const;
    00247     int         IsLocal() const;
    00248     int         IsVertical() const;
    00249     int         IsCompound() const;
    00250     int         IsSameGeogCS( const OGRSpatialReference * ) const;
    00251     int         IsSameVertCS( const OGRSpatialReference * ) const;
    00252     int         IsSame( const OGRSpatialReference * ) const;
    00253
    00254     void        Clear();
    00255     OGRErr      SetLocalCS( const char * );
    00256     OGRErr      SetProjCS( const char * );
    00257     OGRErr      SetProjection( const char * );
    00258     OGRErr      SetGeocCS( const char * pszGeocName );
    00259     OGRErr      SetGeogCS( const char * pszGeogName,
    00260                            const char * pszDatumName,
    00261                            const char * pszEllipsoidName,
    00262                            double dfSemiMajor, double dfInvFlattening,
    00263                            const char * pszPMName = NULL,
    00264                            double dfPMOffset = 0.0,
    00265                            const char * pszUnits = NULL,
    00266                            double dfConvertToRadians = 0.0 );
    00267     OGRErr      SetWellKnownGeogCS( const char * );
    00268     OGRErr      CopyGeogCSFrom( const OGRSpatialReference * poSrcSRS );
    00269     OGRErr      SetVertCS( const char *pszVertCSName,
    00270                            const char *pszVertDatumName,
    00271                            int nVertDatumClass = 2005 );
    00272     OGRErr      SetCompoundCS( const char *pszName,
    00273                                const OGRSpatialReference *poHorizSRS,
    00274                                const OGRSpatialReference *poVertSRS );
    00275
    00276     OGRErr      SetFromUserInput( const char * );
    00277
    00278     OGRErr      SetTOWGS84( double, double, double,
    00279                             double = 0.0, double = 0.0, double = 0.0,
    00280                             double = 0.0 );
    00281     OGRErr      GetTOWGS84( double *padfCoef, int nCoeff = 7 ) const;
    00282
    00283     double      GetSemiMajor( OGRErr * = NULL ) const;
    00284     double      GetSemiMinor( OGRErr * = NULL ) const;
    00285     double      GetInvFlattening( OGRErr * = NULL ) const;
    00286
    00287     OGRErr      SetAuthority( const char * pszTargetKey,
    00288                               const char * pszAuthority,
    00289                               int nCode );
    00290
    00291     OGRErr      AutoIdentifyEPSG();
    00292     int         GetEPSGGeogCS();
    00293
    00294     const char *GetAuthorityCode( const char * pszTargetKey ) const;
    00295     const char *GetAuthorityName( const char * pszTargetKey ) const;
    00296
    00297     const char *GetExtension( const char *pszTargetKey,
    00298                               const char *pszName,
    00299                               const char *pszDefault = NULL ) const;
    00300     OGRErr      SetExtension( const char *pszTargetKey,
    00301                               const char *pszName,
    00302                               const char *pszValue );
    00303
    00304     int         FindProjParm( const char *pszParameter,
    00305                               const OGR_SRSNode *poPROJCS=NULL ) const;
    00306     OGRErr      SetProjParm( const char *, double );
    00307     double      GetProjParm( const char *, double =0.0, OGRErr* = NULL ) const;
    00308
    00309     OGRErr      SetNormProjParm( const char *, double );
    00310     double      GetNormProjParm( const char *, double=0.0, OGRErr* =NULL)const;
    00311
    00312     static int  IsAngularParameter( const char * );
    00313     static int  IsLongitudeParameter( const char * );
    00314     static int  IsLinearParameter( const char * );
    00315
    00317     OGRErr      SetACEA( double dfStdP1, double dfStdP2,
    00318                          double dfCenterLat, double dfCenterLong,
    00319                          double dfFalseEasting, double dfFalseNorthing );
    00320
    00322     OGRErr      SetAE( double dfCenterLat, double dfCenterLong,
    00323                        double dfFalseEasting, double dfFalseNorthing );
    00324
    00326     OGRErr      SetBonne( double dfStdP1, double dfCentralMeridian,
    00327                           double dfFalseEasting, double dfFalseNorthing );
    00328
    00330     OGRErr      SetCEA( double dfStdP1, double dfCentralMeridian,
    00331                         double dfFalseEasting, double dfFalseNorthing );
    00332
    00334     OGRErr      SetCS( double dfCenterLat, double dfCenterLong,
    00335                        double dfFalseEasting, double dfFalseNorthing );
    00336
    00338     OGRErr      SetEC( double dfStdP1, double dfStdP2,
    00339                        double dfCenterLat, double dfCenterLong,
    00340                        double dfFalseEasting, double dfFalseNorthing );
    00341
    00343     OGRErr      SetEckert( int nVariation, double dfCentralMeridian,
    00344                            double dfFalseEasting, double dfFalseNorthing );
    00345
    00346     OGRErr      SetEckertIV( double dfCentralMeridian,
    00347                              double dfFalseEasting, double dfFalseNorthing );
    00348
    00349     OGRErr      SetEckertVI( double dfCentralMeridian,
    00350                              double dfFalseEasting, double dfFalseNorthing );
    00351
    00353     OGRErr      SetEquirectangular(double dfCenterLat, double dfCenterLong,
    00354                             double dfFalseEasting, double dfFalseNorthing );
    00356     OGRErr      SetEquirectangular2( double dfCenterLat, double dfCenterLong,
    00357                                      double dfPseudoStdParallel1,
    00358                                      double dfFalseEasting, double dfFalseNorthing );
    00359
    00361     OGRErr      SetGEOS( double dfCentralMeridian, double dfSatelliteHeight,
    00362                          double dfFalseEasting, double dfFalseNorthing );
    00363
    00365     OGRErr      SetGH( double dfCentralMeridian,
    00366                        double dfFalseEasting, double dfFalseNorthing );
    00367
    00369     OGRErr      SetIGH();
    00370
    00372     OGRErr      SetGS( double dfCentralMeridian,
    00373                        double dfFalseEasting, double dfFalseNorthing );
    00374
    00376     OGRErr      SetGaussSchreiberTMercator(double dfCenterLat, double dfCenterLong,
    00377                                            double dfScale,
    00378                                            double dfFalseEasting, double dfFalseNorthing );
    00379
    00381     OGRErr      SetGnomonic(double dfCenterLat, double dfCenterLong,
    00382                             double dfFalseEasting, double dfFalseNorthing );
    00383
    00385     OGRErr      SetHOM( double dfCenterLat, double dfCenterLong,
    00386                         double dfAzimuth, double dfRectToSkew,
    00387                         double dfScale,
    00388                         double dfFalseEasting, double dfFalseNorthing );
    00389
    00390     OGRErr      SetHOM2PNO( double dfCenterLat,
    00391                             double dfLat1, double dfLong1,
    00392                             double dfLat2, double dfLong2,
    00393                             double dfScale,
    00394                             double dfFalseEasting, double dfFalseNorthing );
    00395
    00397     OGRErr      SetIWMPolyconic( double dfLat1, double dfLat2,
    00398                                  double dfCenterLong,
    00399                                  double dfFalseEasting,
    00400                                  double dfFalseNorthing );
    00401
    00403     OGRErr      SetKrovak( double dfCenterLat, double dfCenterLong,
    00404                            double dfAzimuth, double dfPseudoStdParallelLat,
    00405                            double dfScale,
    00406                            double dfFalseEasting, double dfFalseNorthing );
    00407
    00409     OGRErr      SetLAEA( double dfCenterLat, double dfCenterLong,
    00410                          double dfFalseEasting, double dfFalseNorthing );
    00411
    00413     OGRErr      SetLCC( double dfStdP1, double dfStdP2,
    00414                         double dfCenterLat, double dfCenterLong,
    00415                         double dfFalseEasting, double dfFalseNorthing );
    00416
    00418     OGRErr      SetLCC1SP( double dfCenterLat, double dfCenterLong,
    00419                            double dfScale,
    00420                            double dfFalseEasting, double dfFalseNorthing );
    00421
    00423     OGRErr      SetLCCB( double dfStdP1, double dfStdP2,
    00424                          double dfCenterLat, double dfCenterLong,
    00425                          double dfFalseEasting, double dfFalseNorthing );
    00426
    00428     OGRErr      SetMC( double dfCenterLat, double dfCenterLong,
    00429                        double dfFalseEasting, double dfFalseNorthing );
    00430
    00432     OGRErr      SetMercator( double dfCenterLat, double dfCenterLong,
    00433                              double dfScale,
    00434                              double dfFalseEasting, double dfFalseNorthing );
    00435
    00436     OGRErr      SetMercator2SP( double dfStdP1,
    00437                                 double dfCenterLat, double dfCenterLong,
    00438                                 double dfFalseEasting, double dfFalseNorthing );
    00439
    00441     OGRErr      SetMollweide( double dfCentralMeridian,
    00442                               double dfFalseEasting, double dfFalseNorthing );
    00443
    00445     OGRErr      SetNZMG( double dfCenterLat, double dfCenterLong,
    00446                          double dfFalseEasting, double dfFalseNorthing );
    00447
    00449     OGRErr      SetOS( double dfOriginLat, double dfCMeridian,
    00450                        double dfScale,
    00451                        double dfFalseEasting,double dfFalseNorthing);
    00452
    00454     OGRErr      SetOrthographic( double dfCenterLat, double dfCenterLong,
    00455                                  double dfFalseEasting,double dfFalseNorthing);
    00456
    00458     OGRErr      SetPolyconic( double dfCenterLat, double dfCenterLong,
    00459                               double dfFalseEasting, double dfFalseNorthing );
    00460
    00462     OGRErr      SetPS( double dfCenterLat, double dfCenterLong,
    00463                        double dfScale,
    00464                        double dfFalseEasting, double dfFalseNorthing);
    00465
    00467     OGRErr      SetRobinson( double dfCenterLong,
    00468                              double dfFalseEasting, double dfFalseNorthing );
    00469
    00471     OGRErr      SetSinusoidal( double dfCenterLong,
    00472                                double dfFalseEasting, double dfFalseNorthing );
    00473
    00475     OGRErr      SetStereographic( double dfCenterLat, double dfCenterLong,
    00476                                   double dfScale,
    00477                                  double dfFalseEasting,double dfFalseNorthing);
    00478
    00480     OGRErr      SetSOC( double dfLatitudeOfOrigin, double dfCentralMeridian,
    00481                         double dfFalseEasting, double dfFalseNorthing );
    00482
    00484     OGRErr      SetTM( double dfCenterLat, double dfCenterLong,
    00485                        double dfScale,
    00486                        double dfFalseEasting, double dfFalseNorthing );
    00487
    00489     OGRErr      SetTMVariant( const char *pszVariantName,
    00490                               double dfCenterLat, double dfCenterLong,
    00491                               double dfScale,
    00492                               double dfFalseEasting, double dfFalseNorthing );
    00493
    00495     OGRErr      SetTMG( double dfCenterLat, double dfCenterLong,
    00496                         double dfFalseEasting, double dfFalseNorthing );
    00497
    00499     OGRErr      SetTMSO( double dfCenterLat, double dfCenterLong,
    00500                          double dfScale,
    00501                          double dfFalseEasting, double dfFalseNorthing );
    00502
    00504     OGRErr      SetTPED( double dfLat1, double dfLong1,
    00505                          double dfLat2, double dfLong2,
    00506                          double dfFalseEasting, double dfFalseNorthing );
    00507
    00509     OGRErr      SetVDG( double dfCenterLong,
    00510                         double dfFalseEasting, double dfFalseNorthing );
    00511
    00513     OGRErr      SetUTM( int nZone, int bNorth = TRUE );
    00514     int         GetUTMZone( int *pbNorth = NULL ) const;
    00515
    00517     OGRErr      SetWagner( int nVariation, double dfCenterLat,
    00518                            double dfFalseEasting, double dfFalseNorthing );
    00519
    00521     OGRErr      SetStatePlane( int nZone, int bNAD83 = TRUE,
    00522                                const char *pszOverrideUnitName = NULL,
    00523                                double dfOverrideUnit = 0.0 );
    00524
    00525     OGRErr      ImportFromESRIStatePlaneWKT(
    00526         int nCode, const char* pszDatumName, const char* pszUnitsName,
    00527         int nPCSCode, const char* pszCSName = 0 );
    00528     OGRErr      ImportFromESRIWisconsinWKT(
    00529         const char* pszPrjName, double dfCentralMeridian, double dfLatOfOrigin,
    00530         const char* pszUnitsName, const char* pszCSName = 0 );
    00531 };
    00532
    00533 /************************************************************************/
    00534 /*                     OGRCoordinateTransformation                      */
    00535 /*                                                                      */
    00536 /*      This is really just used as a base class for a private          */
    00537 /*      implementation.                                                 */
    00538 /************************************************************************/
    00539
    00549 class CPL_DLL OGRCoordinateTransformation
    00550 {
    00551 public:
    00552     virtual ~OGRCoordinateTransformation() {}
    00553
    00554     static void DestroyCT(OGRCoordinateTransformation* poCT);
    00555
    00556     // From CT_CoordinateTransformation
    00557
    00559     virtual OGRSpatialReference *GetSourceCS() = 0;
    00560
    00562     virtual OGRSpatialReference *GetTargetCS() = 0;
    00563
    00564     // From CT_MathTransform
    00565
    00581     virtual int Transform( int nCount,
    00582                            double *x, double *y, double *z = NULL ) = 0;
    00583
    00599     virtual int TransformEx( int nCount,
    00600                              double *x, double *y, double *z = NULL,
    00601                              int *pabSuccess = NULL ) = 0;
    00602
    00603 };
    00604
    00605 OGRCoordinateTransformation CPL_DLL *
    00606 OGRCreateCoordinateTransformation( OGRSpatialReference *poSource,
    00607                                    OGRSpatialReference *poTarget );
    00608
    00609 #endif /* ndef _OGR_SPATIALREF_H_INCLUDED */

Generated for GDAL by 1.5.6.