⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ogr_srs_proj4.cpp

📁 用于读取TAB、MIF、SHP文件的类
💻 CPP
📖 第 1 页 / 共 5 页
字号:
    {        SetStereographic( OSR_GDV( papszNV, "lat_0", 0.0 ),                           OSR_GDV( papszNV, "lon_0", 0.0 ) + dfFromGreenwich,                           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 )+dfFromGreenwich,                             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 )+dfFromGreenwich,                      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 )+dfFromGreenwich,                          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 )+dfFromGreenwich,                  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 )+dfFromGreenwich,                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 )+dfFromGreenwich,                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 )+dfFromGreenwich,                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 )+dfFromGreenwich,                       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 )+dfFromGreenwich,                      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 )+dfFromGreenwich,                      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 )+dfFromGreenwich,                       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 )+dfFromGreenwich,                  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 )+dfFromGreenwich,                      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 )+dfFromGreenwich,                 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 )+dfFromGreenwich,                        OSR_GDV( papszNV, "x_0", 0.0 ),                        OSR_GDV( papszNV, "y_0", 0.0 ) );    }    else if( EQUAL(pszProj,"gall") )    {        SetGS( OSR_GDV( papszNV, "lon_0", 0.0 )+dfFromGreenwich,                OSR_GDV( papszNV, "x_0", 0.0 ),                OSR_GDV( papszNV, "y_0", 0.0 ) );    }    else if( EQUAL(pszProj,"goode") )    {        SetGH( OSR_GDV( papszNV, "lon_0", 0.0 )+dfFromGreenwich,                OSR_GDV( papszNV, "x_0", 0.0 ),                OSR_GDV( papszNV, "y_0", 0.0 ) );    }    else if( EQUAL(pszProj,"geos") )    {        SetGEOS( OSR_GDV( papszNV, "lon_0", 0.0 )+dfFromGreenwich,                  OSR_GDV( papszNV, "h", 35785831.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 )+dfFromGreenwich,                        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 )+dfFromGreenwich,                     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 )+dfFromGreenwich,                 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 if( EQUAL(pszProj,"somerc") )    {        SetHOM( OSR_GDV( papszNV, "lat_0", 0.0 ),                 OSR_GDV( papszNV, "lon_0", 0.0 )+dfFromGreenwich,                 90.0,  90.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,"krovak") )    {        SetKrovak( OSR_GDV( papszNV, "lat_0", 0.0 ),                    OSR_GDV( papszNV, "lon_0", 0.0 )+dfFromGreenwich,                    OSR_GDV( papszNV, "alpha", 0.0 ),                    0.0, // pseudo_standard_parallel_1                   OSR_GDV( papszNV, "k", 1.0 ),                    OSR_GDV( papszNV, "x_0", 0.0 ),                    OSR_GDV( papszNV, "y_0", 0.0 ) );    }    else if( EQUAL(pszProj,"tpeqd") )    {        SetTPED( OSR_GDV( papszNV, "lat_1", 0.0 ),                  OSR_GDV( papszNV, "lon_1", 0.0 )+dfFromGreenwich,                  OSR_GDV( papszNV, "lat_2", 0.0 ),                  OSR_GDV( papszNV, "lon_2", 0.0 )+dfFromGreenwich,                  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;    }/* -------------------------------------------------------------------- *//*      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 if( EQUAL(pszValue,"potsdam") )    {        OGRSpatialReference oGCS;        oGCS.importFromEPSG( 4314 );        CopyGeogCSFrom( &oGCS );        bFullyDefined = TRUE;    }    else if( EQUAL(pszValue,"nzgd49") )    {        OGRSpatialReference oGCS;        oGCS.importFromEPSG( 4272 );        CopyGeogCSFrom( &oGCS );        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 )        {            dfSemiMajor = OSR_GDV( papszNV, "R", 0.0 );            if( dfSemiMajor != 0.0 )            {                dfSemiMinor = -1.0;                dfInvFlattening = 0.0;            }            else            {                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 );        }                if( dfSemiMinor == -1.0 && dfInvFlattening == -1.0 )        {            CPLDebug( "OGR_PROJ4", "Can't find ellipse definition in:\n%s",                       pszProj4 );            CSLDestroy( papszNV );            return OGRERR_UNSUPPORTED_SRS;        }        if( dfInvFlattening == -1.0 )        {            if( ABS(dfSemiMajor/dfSemiMinor) - 1.0 < 0.0000000000001 )                dfInvFlattening = 0.0;            else                dfInvFlattening = -1.0 / (dfSemiMinor/dfSemiMajor - 1.0);        }

⌨️ 快捷键说明

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