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

📄 mitab_coordsys.cpp

📁 GIS系统支持库Geospatial Data Abstraction Library代码.GDAL is a translator library for raster geospatial dat
💻 CPP
📖 第 1 页 / 共 4 页
字号:
        /*--------------------------------------------------------------         * 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 ) * dfUnitsConv,                      GetMIFParm( papszNextField, 3, 0.0 ) * dfUnitsConv );        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 ) * dfUnitsConv,                      GetMIFParm( papszNextField, 5, 0.0 ) * dfUnitsConv );        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 ) * dfUnitsConv,                     GetMIFParm( papszNextField, 5, 0.0 ) * dfUnitsConv );        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 * dfUnitsConv ),                      GetMIFParm( papszNextField, 5, 0.0 * dfUnitsConv ) );        break;        /*--------------------------------------------------------------         * Transverse Mercator         *-------------------------------------------------------------*/      case 8:      case 21:      case 22:      case 23:      case 24:        poSR->SetTM( GetMIFParm( papszNextField, 1, 0.0 ),                     GetMIFParm( papszNextField, 0, 0.0 ),                     GetMIFParm( papszNextField, 2, 1.0 ),                     GetMIFParm( papszNextField, 3, 0.0 ) * dfUnitsConv,                     GetMIFParm( papszNextField, 4, 0.0 ) * dfUnitsConv );        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 ) * dfUnitsConv,                       GetMIFParm( papszNextField, 5, 0.0 ) * dfUnitsConv );        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 ) * dfUnitsConv,                       GetMIFParm( papszNextField, 3, 0.0 ) * dfUnitsConv );        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 ) * dfUnitsConv,                       GetMIFParm( papszNextField, 5, 0.0 ) * dfUnitsConv );        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 ) * dfUnitsConv,            GetMIFParm( papszNextField, 4, 0.0 ) * dfUnitsConv );        break;        /*--------------------------------------------------------------         * Swiss Oblique Mercator / Cylindrical         *-------------------------------------------------------------*/      case 25:        poSR->SetSOC( GetMIFParm( papszNextField, 1, 0.0 ),                      GetMIFParm( papszNextField, 0, 0.0 ),                      GetMIFParm( papszNextField, 2, 0.0 ) * dfUnitsConv,                      GetMIFParm( papszNextField, 3, 0.0 ) * dfUnitsConv );        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 ) * dfUnitsConv,                          GetMIFParm( papszNextField, 3, 0.0 ) * dfUnitsConv );        break;        /*--------------------------------------------------------------         * CassiniSoldner         *-------------------------------------------------------------*/      case 30:        poSR->SetCS(             GetMIFParm( papszNextField, 1, 0.0 ),            GetMIFParm( papszNextField, 0, 0.0 ),            GetMIFParm( papszNextField, 2, 0.0 ) * dfUnitsConv,            GetMIFParm( papszNextField, 3, 0.0 ) * dfUnitsConv );        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] );    }    else if( psDatumInfo->pszOGCDatumName != NULL             && strlen(psDatumInfo->pszOGCDatumName) > 0 )    {        strncpy( szDatumName, psDatumInfo->pszOGCDatumName,                 sizeof(szDatumName) );    }    else    {        sprintf( szDatumName, "MIF %d", nDatum );    }/* -------------------------------------------------------------------- *//*      Set prime meridian for 9999 datums.                             */

⌨️ 快捷键说明

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