ogr_srs_proj4.cpp

来自「在linux环境下」· C++ 代码 · 共 1,643 行 · 第 1/4 页

CPP
1,643
字号
    }        else if( EQUAL(pszProj,"cass") )    {        SetCS( OSR_GDV( papszNV, "lat_0", 0.0 ),                OSR_GDV( papszNV, "lon_0", 0.0 ),                OSR_GDV( papszNV, "x_0", 0.0 ),                OSR_GDV( papszNV, "y_0", 0.0 ) );    }    else if( EQUAL(pszProj,"nzmg") )    {        SetNZMG( OSR_GDV( papszNV, "lat_0", -41.0 ),                  OSR_GDV( papszNV, "lon_0", 173.0 ),                  OSR_GDV( papszNV, "x_0", 2510000.0 ),                  OSR_GDV( papszNV, "y_0", 6023150.0 ) );    }    else if( EQUAL(pszProj,"cea") )    {        SetCEA( OSR_GDV( papszNV, "lat_ts", 0.0 ),                 OSR_GDV( papszNV, "lon_0", 0.0 ),                 OSR_GDV( papszNV, "x_0", 0.0 ),                 OSR_GDV( papszNV, "y_0", 0.0 ) );    }    else if( EQUAL(pszProj,"tmerc") )    {        SetTM( OSR_GDV( papszNV, "lat_0", 0.0 ),                OSR_GDV( papszNV, "lon_0", 0.0 ),                OSR_GDV( papszNV, "k", 1.0 ),                OSR_GDV( papszNV, "x_0", 0.0 ),                OSR_GDV( papszNV, "y_0", 0.0 ) );    }    else if( EQUAL(pszProj,"utm") )    {        SetUTM( (int) OSR_GDV( papszNV, "zone", 0.0 ),                (int) OSR_GDV( papszNV, "south", 1.0 ) );    }    else if( EQUAL(pszProj,"merc") )    {        SetMercator( OSR_GDV( papszNV, "lat_ts", 0.0 ),                      OSR_GDV( papszNV, "lon_0", 0.0 ),                      OSR_GDV( papszNV, "k", 1.0 ),                      OSR_GDV( papszNV, "x_0", 0.0 ),                      OSR_GDV( papszNV, "y_0", 0.0 ) );    }    else if( EQUAL(pszProj,"stere")              && ABS(OSR_GDV( papszNV, "lat_0", 0.0 ) - 90) < 0.001 )    {        SetPS( OSR_GDV( papszNV, "lat_ts", 90.0 ),                OSR_GDV( papszNV, "lon_0", 0.0 ),                OSR_GDV( papszNV, "k", 1.0 ),                OSR_GDV( papszNV, "x_0", 0.0 ),                OSR_GDV( papszNV, "y_0", 0.0 ) );    }    else if( EQUAL(pszProj,"stere")              && ABS(OSR_GDV( papszNV, "lat_0", 0.0 ) + 90) < 0.001 )    {        SetPS( OSR_GDV( papszNV, "lat_ts", -90.0 ),                OSR_GDV( papszNV, "lon_0", 0.0 ),                OSR_GDV( papszNV, "k", 1.0 ),                OSR_GDV( papszNV, "x_0", 0.0 ),                OSR_GDV( papszNV, "y_0", 0.0 ) );    }    else if( EQUAL(pszProj,"stere")              && CSLFetchNameValue(papszNV,"k") != NULL )    {        SetOS( OSR_GDV( papszNV, "lat_0", 0.0 ),                OSR_GDV( papszNV, "lon_0", 0.0 ),                OSR_GDV( papszNV, "k", 1.0 ),                OSR_GDV( papszNV, "x_0", 0.0 ),                OSR_GDV( papszNV, "y_0", 0.0 ) );    }    else if( EQUAL(pszProj,"stere") )    {        SetStereographic( OSR_GDV( papszNV, "lat_0", 0.0 ),                           OSR_GDV( papszNV, "lon_0", 0.0 ),                           1.0,                           OSR_GDV( papszNV, "x_0", 0.0 ),                           OSR_GDV( papszNV, "y_0", 0.0 ) );    }    else if( EQUAL(pszProj,"eqc") )    {        SetEquirectangular( OSR_GDV( papszNV, "lat_ts", 0.0 ),                             OSR_GDV( papszNV, "lon_0", 0.0 ),                             OSR_GDV( papszNV, "x_0", 0.0 ),                             OSR_GDV( papszNV, "y_0", 0.0 ) );    }    else if( EQUAL(pszProj,"gnom") )    {        SetGnomonic( OSR_GDV( papszNV, "lat_0", 0.0 ),                      OSR_GDV( papszNV, "lon_0", 0.0 ),                      OSR_GDV( papszNV, "x_0", 0.0 ),                      OSR_GDV( papszNV, "y_0", 0.0 ) );    }    else if( EQUAL(pszProj,"ortho") )    {        SetOrthographic( OSR_GDV( papszNV, "lat_0", 0.0 ),                          OSR_GDV( papszNV, "lon_0", 0.0 ),                          OSR_GDV( papszNV, "x_0", 0.0 ),                          OSR_GDV( papszNV, "y_0", 0.0 ) );    }    else if( EQUAL(pszProj,"laea") )    {        SetLAEA( OSR_GDV( papszNV, "lat_0", 0.0 ),                  OSR_GDV( papszNV, "lon_0", 0.0 ),                  OSR_GDV( papszNV, "x_0", 0.0 ),                  OSR_GDV( papszNV, "y_0", 0.0 ) );    }    else if( EQUAL(pszProj,"aeqd") )    {        SetAE( OSR_GDV( papszNV, "lat_0", 0.0 ),                OSR_GDV( papszNV, "lon_0", 0.0 ),                OSR_GDV( papszNV, "x_0", 0.0 ),                OSR_GDV( papszNV, "y_0", 0.0 ) );    }    else if( EQUAL(pszProj,"eqdc") )    {        SetEC( OSR_GDV( papszNV, "lat_1", 0.0 ),                OSR_GDV( papszNV, "lat_2", 0.0 ),                OSR_GDV( papszNV, "lat_0", 0.0 ),                OSR_GDV( papszNV, "lon_0", 0.0 ),                OSR_GDV( papszNV, "x_0", 0.0 ),                OSR_GDV( papszNV, "y_0", 0.0 ) );    }    else if( EQUAL(pszProj,"mill") )    {        SetMC( OSR_GDV( papszNV, "lat_0", 0.0 ),                OSR_GDV( papszNV, "lon_0", 0.0 ),                OSR_GDV( papszNV, "x_0", 0.0 ),                OSR_GDV( papszNV, "y_0", 0.0 ) );    }    else if( EQUAL(pszProj,"moll") )    {        SetMollweide( OSR_GDV( papszNV, "lon_0", 0.0 ),                       OSR_GDV( papszNV, "x_0", 0.0 ),                       OSR_GDV( papszNV, "y_0", 0.0 ) );    }    else if( EQUAL(pszProj,"eck4") )    {        SetEckertIV( OSR_GDV( papszNV, "lon_0", 0.0 ),                      OSR_GDV( papszNV, "x_0", 0.0 ),                      OSR_GDV( papszNV, "y_0", 0.0 ) );    }    else if( EQUAL(pszProj,"eck6") )    {        SetEckertVI( OSR_GDV( papszNV, "lon_0", 0.0 ),                      OSR_GDV( papszNV, "x_0", 0.0 ),                      OSR_GDV( papszNV, "y_0", 0.0 ) );    }    else if( EQUAL(pszProj,"poly") )    {        SetPolyconic( OSR_GDV( papszNV, "lat_0", 0.0 ),                       OSR_GDV( papszNV, "lon_0", 0.0 ),                       OSR_GDV( papszNV, "x_0", 0.0 ),                       OSR_GDV( papszNV, "y_0", 0.0 ) );    }    else if( EQUAL(pszProj,"aea") )    {        SetACEA( OSR_GDV( papszNV, "lat_1", 0.0 ),                  OSR_GDV( papszNV, "lat_2", 0.0 ),                  OSR_GDV( papszNV, "lat_0", 0.0 ),                  OSR_GDV( papszNV, "lon_0", 0.0 ),                  OSR_GDV( papszNV, "x_0", 0.0 ),                  OSR_GDV( papszNV, "y_0", 0.0 ) );    }    else if( EQUAL(pszProj,"robin") )    {        SetRobinson( OSR_GDV( papszNV, "lon_0", 0.0 ),                      OSR_GDV( papszNV, "x_0", 0.0 ),                      OSR_GDV( papszNV, "y_0", 0.0 ) );    }    else if( EQUAL(pszProj,"vandg") )    {        SetVDG( OSR_GDV( papszNV, "lon_0", 0.0 ),                 OSR_GDV( papszNV, "x_0", 0.0 ),                 OSR_GDV( papszNV, "y_0", 0.0 ) );    }    else if( EQUAL(pszProj,"sinu") )    {        SetSinusoidal( OSR_GDV( papszNV, "lon_0", 0.0 ),                        OSR_GDV( papszNV, "x_0", 0.0 ),                        OSR_GDV( papszNV, "y_0", 0.0 ) );    }    else if( EQUAL(pszProj,"gall") )    {        SetSinusoidal( OSR_GDV( papszNV, "lon_0", 0.0 ),                        OSR_GDV( papszNV, "x_0", 0.0 ),                        OSR_GDV( papszNV, "y_0", 0.0 ) );    }    else if( EQUAL(pszProj,"lcc") )     {        if( OSR_GDV(papszNV, "lat_0", 0.0 )             == OSR_GDV(papszNV, "lat_1", 0.0 ) )        {            /* 1SP form */            SetLCC1SP( OSR_GDV( papszNV, "lat_0", 0.0 ),                        OSR_GDV( papszNV, "lon_0", 0.0 ),                        OSR_GDV( papszNV, "k_0", 1.0 ),                        OSR_GDV( papszNV, "x_0", 0.0 ),                        OSR_GDV( papszNV, "y_0", 0.0 ) );        }        else        {            /* 2SP form */            SetLCC( OSR_GDV( papszNV, "lat_1", 0.0 ),                     OSR_GDV( papszNV, "lat_2", 0.0 ),                     OSR_GDV( papszNV, "lat_0", 0.0 ),                     OSR_GDV( papszNV, "lon_0", 0.0 ),                     OSR_GDV( papszNV, "x_0", 0.0 ),                     OSR_GDV( papszNV, "y_0", 0.0 ) );        }    }    else if( EQUAL(pszProj,"omerc") )    {        SetHOM( OSR_GDV( papszNV, "lat_0", 0.0 ),                 OSR_GDV( papszNV, "lonc", 0.0 ),                 OSR_GDV( papszNV, "alpha", 0.0 ),                 0.0, /* ??? */                OSR_GDV( papszNV, "k", 1.0 ),                 OSR_GDV( papszNV, "x_0", 0.0 ),                 OSR_GDV( papszNV, "y_0", 0.0 ) );    }    else    {        CPLDebug( "OGR_PROJ4", "Unsupported projection: %s", pszProj );        CSLDestroy( papszNV );        return OGRERR_CORRUPT_DATA;    }/* -------------------------------------------------------------------- *//*      Extract the prime meridian, if there is one set.                *//* -------------------------------------------------------------------- */    const char *pszPM = CSLFetchNameValue( papszNV, "pm" );    double dfFromGreenwich = 0.0;    int    nPMCode = -1;    if( pszPM != NULL )    {        if( EQUAL(pszPM,"lisbon") )        {            dfFromGreenwich = CPLDMSToDec( "9d07'54.862\"W" );            nPMCode = 8902;        }        else if( EQUAL(pszPM,"paris") )        {            dfFromGreenwich = CPLDMSToDec( "2d20'14.025\"E" );            nPMCode = 8903;        }        else if( EQUAL(pszPM,"bogota") )        {            dfFromGreenwich = CPLDMSToDec( "74d04'51.3\"E" );            nPMCode = 8904;        }        else if( EQUAL(pszPM,"madrid") )        {            dfFromGreenwich = CPLDMSToDec( "3d41'16.48\"W" );            nPMCode = 8905;        }        else if( EQUAL(pszPM,"rome") )        {            dfFromGreenwich = CPLDMSToDec( "12d27'8.4\"E" );            nPMCode = 8906;        }        else if( EQUAL(pszPM,"bern") )        {            dfFromGreenwich = CPLDMSToDec( "7d26'22.5\"E" );            nPMCode = 8907;        }        else if( EQUAL(pszPM,"jakarta") )        {            dfFromGreenwich = CPLDMSToDec( "106d48'27.79\"E" );            nPMCode = 8908;        }        else if( EQUAL(pszPM,"ferro") )        {            dfFromGreenwich = CPLDMSToDec( "17d40'W" );            nPMCode = 8909;        }        else if( EQUAL(pszPM,"brussels") )        {            dfFromGreenwich = CPLDMSToDec( "4d22'4.71\"E" );            nPMCode = 8910;        }        else if( EQUAL(pszPM,"stockholm") )        {            dfFromGreenwich = CPLDMSToDec( "18d3'29.8\"E" );            nPMCode = 8911;        }        else if( EQUAL(pszPM,"athens") )        {            dfFromGreenwich = CPLDMSToDec( "23d42'58.815\"E" );            nPMCode = 8912;        }        else if( EQUAL(pszPM,"oslo") )        {            dfFromGreenwich = CPLDMSToDec( "10d43'22.5\"E" );            nPMCode = 8913;        }        else        {            dfFromGreenwich = CPLDMSToDec( pszPM );            pszPM = "unnamed";        }    }    else        pszPM = "Greenwich";/* -------------------------------------------------------------------- *//*      Try to translate the datum.                                     *//* -------------------------------------------------------------------- */    const char *pszValue;    int  bFullyDefined = FALSE;    pszValue = CSLFetchNameValue(papszNV, "datum");    if( pszValue == NULL )    {        /* do nothing */    }    else if( (EQUAL(pszValue,"NAD27") || EQUAL(pszValue,"NAD83")              || EQUAL(pszValue,"WGS84") || EQUAL(pszValue,"WGS72"))              && dfFromGreenwich == 0.0 )    {        SetWellKnownGeogCS( pszValue );        bFullyDefined = TRUE;    }    else    {        /* we don't recognise the datum, and ignore it */    }/* -------------------------------------------------------------------- *//*      Set the ellipsoid information.                                   *//* -------------------------------------------------------------------- */    double dfSemiMajor, dfInvFlattening, dfSemiMinor;    pszValue = CSLFetchNameValue(papszNV, "ellps");    if( pszValue != NULL && !bFullyDefined )    {        for( i = 0; ogr_pj_ellps[i] != NULL; i += 4 )        {            if( !EQUAL(ogr_pj_ellps[i],pszValue) )                continue;            CPLAssert( EQUALN(ogr_pj_ellps[i+1],"a=",2) );                        dfSemiMajor = atof(ogr_pj_ellps[i+1]+2);            if( EQUALN(ogr_pj_ellps[i+2],"rf=",3) )                dfInvFlattening = atof(ogr_pj_ellps[i+2]+3);            else            {                CPLAssert( EQUALN(ogr_pj_ellps[i+2],"b=",2) );                dfSemiMinor = atof(ogr_pj_ellps[i+2]+2);                                if( ABS(dfSemiMajor/dfSemiMinor) - 1.0 < 0.0000000000001 )                    dfInvFlattening = 0.0;                else                    dfInvFlattening = -1.0 / (dfSemiMinor/dfSemiMajor - 1.0);            }                        SetGeogCS( ogr_pj_ellps[i+3], "unknown", ogr_pj_ellps[i],                        dfSemiMajor, dfInvFlattening,                       pszPM, dfFromGreenwich );            bFullyDefined = TRUE;            break;        }    }    if( !bFullyDefined )    {        dfSemiMajor = OSR_GDV( papszNV, "a", 0.0 );        if( dfSemiMajor == 0.0 )        {            CPLDebug( "OGR_PROJ4", "Can't find ellipse definition, default to WGS84:\n%s",                       pszProj4 );            dfSemiMajor = SRS_WGS84_SEMIMAJOR;            dfSemiMinor = -1.0;            dfInvFlattening = SRS_WGS84_INVFLATTENING;        }        else        {            dfSemiMinor = OSR_GDV( papszNV, "b", -1.0 );            dfInvFlattening = OSR_GDV( papszNV, "rf", -1.0 );

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?