📄 ogr_srs_proj4.cpp
字号:
{ 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 + -