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 + -
显示快捷键?