📄 mitab_coordsys.cpp
字号:
* lat/long .. just add the GEOGCS later. *-------------------------------------------------------------*/ case 1: break; /*-------------------------------------------------------------- * Cylindrical Equal Area *-------------------------------------------------------------*/ case 2: poSR->SetCEA( GetMIFParm( papszNextField, 1, 0.0 ), GetMIFParm( papszNextField, 0, 0.0 ), GetMIFParm( papszNextField, 2, 0.0 ), GetMIFParm( papszNextField, 3, 0.0 ) ); break; /*-------------------------------------------------------------- * Lambert Conic Conformal *-------------------------------------------------------------*/ case 3: poSR->SetLCC( GetMIFParm( papszNextField, 2, 0.0 ), GetMIFParm( papszNextField, 3, 0.0 ), GetMIFParm( papszNextField, 1, 0.0 ), GetMIFParm( papszNextField, 0, 0.0 ), GetMIFParm( papszNextField, 4, 0.0 ), GetMIFParm( papszNextField, 5, 0.0 ) ); break; /*-------------------------------------------------------------- * Lambert Azimuthal Equal Area *-------------------------------------------------------------*/ case 4: case 29: poSR->SetLAEA( GetMIFParm( papszNextField, 1, 0.0 ), GetMIFParm( papszNextField, 0, 0.0 ), 0.0, 0.0 ); break; /*-------------------------------------------------------------- * Azimuthal Equidistant *-------------------------------------------------------------*/ case 5: /* polar aspect only */ case 28: /* all aspects */ poSR->SetAE( GetMIFParm( papszNextField, 1, 0.0 ), GetMIFParm( papszNextField, 0, 0.0 ), 0.0, 0.0 ); break; /*-------------------------------------------------------------- * Equidistant Conic *-------------------------------------------------------------*/ case 6: poSR->SetEC( GetMIFParm( papszNextField, 2, 0.0 ), GetMIFParm( papszNextField, 3, 0.0 ), GetMIFParm( papszNextField, 1, 0.0 ), GetMIFParm( papszNextField, 0, 0.0 ), GetMIFParm( papszNextField, 4, 0.0 ), GetMIFParm( papszNextField, 5, 0.0 ) ); break; /*-------------------------------------------------------------- * Hotine Oblique Mercator *-------------------------------------------------------------*/ case 7: poSR->SetHOM( GetMIFParm( papszNextField, 1, 0.0 ), GetMIFParm( papszNextField, 0, 0.0 ), GetMIFParm( papszNextField, 2, 0.0 ), 90.0, GetMIFParm( papszNextField, 3, 1.0 ), GetMIFParm( papszNextField, 4, 0.0 ), GetMIFParm( papszNextField, 5, 0.0 ) ); break; /*-------------------------------------------------------------- * Transverse Mercator *-------------------------------------------------------------*/ case 8: poSR->SetTM( GetMIFParm( papszNextField, 1, 0.0 ), GetMIFParm( papszNextField, 0, 0.0 ), GetMIFParm( papszNextField, 2, 1.0 ), GetMIFParm( papszNextField, 3, 0.0 ), GetMIFParm( papszNextField, 4, 0.0 ) ); break; /*---------------------------------------------------------------- * Transverse Mercator,(modified for Danish System 34 Jylland-Fyn) *---------------------------------------------------------------*/ case 21: poSR->SetTMVariant( SRS_PT_TRANSVERSE_MERCATOR_MI_21, GetMIFParm( papszNextField, 1, 0.0 ), GetMIFParm( papszNextField, 0, 0.0 ), GetMIFParm( papszNextField, 2, 1.0 ), GetMIFParm( papszNextField, 3, 0.0 ), GetMIFParm( papszNextField, 4, 0.0 )); break; /*-------------------------------------------------------------- * Transverse Mercator,(modified for Danish System 34 Sjaelland) *-------------------------------------------------------------*/ case 22: poSR->SetTMVariant( SRS_PT_TRANSVERSE_MERCATOR_MI_22, GetMIFParm( papszNextField, 1, 0.0 ), GetMIFParm( papszNextField, 0, 0.0 ), GetMIFParm( papszNextField, 2, 1.0 ), GetMIFParm( papszNextField, 3, 0.0 ), GetMIFParm( papszNextField, 4, 0.0 )); break; /*---------------------------------------------------------------- * Transverse Mercator,(modified for Danish System 34/45 Bornholm) *---------------------------------------------------------------*/ case 23: poSR->SetTMVariant( SRS_PT_TRANSVERSE_MERCATOR_MI_23, GetMIFParm( papszNextField, 1, 0.0 ), GetMIFParm( papszNextField, 0, 0.0 ), GetMIFParm( papszNextField, 2, 1.0 ), GetMIFParm( papszNextField, 3, 0.0 ), GetMIFParm( papszNextField, 4, 0.0 )); break; /*-------------------------------------------------------------- * Transverse Mercator,(modified for Finnish KKJ) *-------------------------------------------------------------*/ case 24: poSR->SetTMVariant( SRS_PT_TRANSVERSE_MERCATOR_MI_24, GetMIFParm( papszNextField, 1, 0.0 ), GetMIFParm( papszNextField, 0, 0.0 ), GetMIFParm( papszNextField, 2, 1.0 ), GetMIFParm( papszNextField, 3, 0.0 ), GetMIFParm( papszNextField, 4, 0.0 )); break; /*-------------------------------------------------------------- * Albers Conic Equal Area *-------------------------------------------------------------*/ case 9: poSR->SetACEA( GetMIFParm( papszNextField, 2, 0.0 ), GetMIFParm( papszNextField, 3, 0.0 ), GetMIFParm( papszNextField, 1, 0.0 ), GetMIFParm( papszNextField, 0, 0.0 ), GetMIFParm( papszNextField, 4, 0.0 ), GetMIFParm( papszNextField, 5, 0.0 ) ); break; /*-------------------------------------------------------------- * Mercator *-------------------------------------------------------------*/ case 10: poSR->SetMercator( 0.0, GetMIFParm( papszNextField, 0, 0.0 ), 1.0, 0.0, 0.0 ); break; /*-------------------------------------------------------------- * Miller Cylindrical *-------------------------------------------------------------*/ case 11: poSR->SetMC( 0.0, GetMIFParm( papszNextField, 0, 0.0 ), 0.0, 0.0 ); break; /*-------------------------------------------------------------- * Robinson *-------------------------------------------------------------*/ case 12: poSR->SetRobinson( GetMIFParm( papszNextField, 0, 0.0 ), 0.0, 0.0 ); break; /*-------------------------------------------------------------- * Mollweide *-------------------------------------------------------------*/ case 13: poSR->SetMollweide( GetMIFParm( papszNextField, 0, 0.0 ), 0.0, 0.0 ); /*-------------------------------------------------------------- * Eckert IV *-------------------------------------------------------------*/ case 14: poSR->SetEckertIV( GetMIFParm( papszNextField, 0, 0.0 ), 0.0, 0.0 ); break; /*-------------------------------------------------------------- * Eckert VI *-------------------------------------------------------------*/ case 15: poSR->SetEckertVI( GetMIFParm( papszNextField, 0, 0.0 ), 0.0, 0.0 ); break; /*-------------------------------------------------------------- * Sinusoidal *-------------------------------------------------------------*/ case 16: poSR->SetSinusoidal( GetMIFParm( papszNextField, 0, 0.0 ), 0.0, 0.0 ); break; /*-------------------------------------------------------------- * Gall *-------------------------------------------------------------*/ case 17: poSR->SetGS( GetMIFParm( papszNextField, 0, 0.0 ), 0.0, 0.0 ); break; /*-------------------------------------------------------------- * New Zealand Map Grid *-------------------------------------------------------------*/ case 18: poSR->SetNZMG( GetMIFParm( papszNextField, 1, 0.0 ), GetMIFParm( papszNextField, 0, 0.0 ), GetMIFParm( papszNextField, 2, 0.0 ), GetMIFParm( papszNextField, 3, 0.0 ) ); break; /*-------------------------------------------------------------- * Lambert Conic Conformal (Belgium) *-------------------------------------------------------------*/ case 19: poSR->SetLCCB( GetMIFParm( papszNextField, 2, 0.0 ), GetMIFParm( papszNextField, 3, 0.0 ), GetMIFParm( papszNextField, 1, 0.0 ), GetMIFParm( papszNextField, 0, 0.0 ), GetMIFParm( papszNextField, 4, 0.0 ), GetMIFParm( papszNextField, 5, 0.0 ) ); break; /*-------------------------------------------------------------- * Stereographic *-------------------------------------------------------------*/ case 20: case 31: /* double stereographic */ poSR->SetStereographic( GetMIFParm( papszNextField, 1, 0.0 ), GetMIFParm( papszNextField, 0, 0.0 ), GetMIFParm( papszNextField, 2, 1.0 ), GetMIFParm( papszNextField, 3, 0.0 ), GetMIFParm( papszNextField, 4, 0.0 ) ); break; /*-------------------------------------------------------------- * Swiss Oblique Mercator / Cylindrical *-------------------------------------------------------------*/ case 25: poSR->SetSOC( GetMIFParm( papszNextField, 1, 0.0 ), GetMIFParm( papszNextField, 0, 0.0 ), GetMIFParm( papszNextField, 2, 0.0 ), GetMIFParm( papszNextField, 3, 0.0 ) ); break; /*-------------------------------------------------------------- * Regional Mercator *-------------------------------------------------------------*/ case 26: poSR->SetMercator( GetMIFParm( papszNextField, 1, 0.0 ), GetMIFParm( papszNextField, 0, 0.0 ), 1.0, 0.0, 0.0 ); break; /*-------------------------------------------------------------- * Polygonic *-------------------------------------------------------------*/ case 27: poSR->SetPolyconic( GetMIFParm( papszNextField, 1, 0.0 ), GetMIFParm( papszNextField, 0, 0.0 ), GetMIFParm( papszNextField, 2, 0.0 ), GetMIFParm( papszNextField, 3, 0.0 ) ); break; /*-------------------------------------------------------------- * CassiniSoldner *-------------------------------------------------------------*/ case 30: poSR->SetCS( GetMIFParm( papszNextField, 1, 0.0 ), GetMIFParm( papszNextField, 0, 0.0 ), GetMIFParm( papszNextField, 2, 0.0 ), GetMIFParm( papszNextField, 3, 0.0 ) ); break; default: break; }/* -------------------------------------------------------------------- *//* Set linear units. *//* -------------------------------------------------------------------- */ if( pszUnitsName != NULL ) poSR->SetLinearUnits( pszUnitsName, dfUnitsConv );/* -------------------------------------------------------------------- *//* For Non-Earth projection, we're done at this point. *//* -------------------------------------------------------------------- */ if (nProjection == 0) { CSLDestroy(papszFields); return poSR; }/* ==================================================================== *//* Establish the GeogCS *//* ==================================================================== */ const char *pszGeogName = "unnamed"; const char *pszSpheroidName = "GRS_1980"; double dfSemiMajor = 6378137.0; double dfInvFlattening = 298.257222101; const char *pszPrimeM = "Greenwich"; double dfPMLongToGreenwich = 0.0;/* -------------------------------------------------------------------- *//* Find the datum, and collect it's parameters if possible. *//* -------------------------------------------------------------------- */ int iDatum; MapInfoDatumInfo *psDatumInfo = NULL; for( iDatum = 0; asDatumInfoList[iDatum].nMapInfoDatumID != -1; iDatum++ ) { if( asDatumInfoList[iDatum].nMapInfoDatumID == nDatum ) { psDatumInfo = asDatumInfoList + iDatum; break; } } if( asDatumInfoList[iDatum].nMapInfoDatumID == -1 && nDatum != 999 && nDatum != 9999 ) { /* use WGS84 */ psDatumInfo = asDatumInfoList + 0; } if( psDatumInfo != NULL ) { nEllipsoid = psDatumInfo->nEllipsoid; adfDatumParm[0] = psDatumInfo->dfShiftX; adfDatumParm[1] = psDatumInfo->dfShiftY; adfDatumParm[2] = psDatumInfo->dfShiftZ; adfDatumParm[3] = psDatumInfo->dfDatumParm0; adfDatumParm[4] = psDatumInfo->dfDatumParm1; adfDatumParm[5] = psDatumInfo->dfDatumParm2; adfDatumParm[6] = psDatumInfo->dfDatumParm3; adfDatumParm[7] = psDatumInfo->dfDatumParm4; } /* -------------------------------------------------------------------- *//* Set the spheroid if it is known from the table. *//* -------------------------------------------------------------------- */ for( int i = 0; asSpheroidInfoList[i].nMapInfoId != -1; i++ ) { if( asSpheroidInfoList[i].nMapInfoId == nEllipsoid ) { dfSemiMajor = asSpheroidInfoList[i].dfA; dfInvFlattening = asSpheroidInfoList[i].dfInvFlattening; pszSpheroidName = asSpheroidInfoList[i].pszMapinfoName; break; } }/* -------------------------------------------------------------------- *//* apply datum parameters. *//* -------------------------------------------------------------------- */ char szDatumName[128]; if( nDatum == 999 ) { sprintf( szDatumName, "MIF 9999,%d,%.15g,%.15g,%.15g", nEllipsoid, adfDatumParm[0], adfDatumParm[1], adfDatumParm[2] ); } else if( nDatum == 9999 ) { sprintf( szDatumName, "MIF 9999,%d,%.15g,%.15g,%.15g,%.15g,%.15g,%.15g,%.15g,%.15g", nEllipsoid, adfDatumParm[0], adfDatumParm[1], adfDatumParm[2], adfDatumParm[3], adfDatumParm[4], adfDatumParm[5], adfDatumParm[6], adfDatumParm[7] ); }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -