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

📄 mitab_coordsys.cpp

📁 用于读取TAB、MIF、SHP文件的类
💻 CPP
📖 第 1 页 / 共 4 页
字号:
    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.                             *//* -------------------------------------------------------------------- */    if( nDatum == 9999 )    {        pszPrimeM = "non-Greenwich";        dfPMLongToGreenwich = adfDatumParm[7];    }/* -------------------------------------------------------------------- *//*      Set the GeogCS.                                                 *//* -------------------------------------------------------------------- */    poSR->SetGeogCS( pszGeogName, szDatumName, pszSpheroidName,                     dfSemiMajor, dfInvFlattening,                     pszPrimeM, dfPMLongToGreenwich,                     SRS_UA_DEGREE,                     atof(SRS_UA_DEGREE_CONV) );    poSR->SetTOWGS84( adfDatumParm[0], adfDatumParm[1], adfDatumParm[2],                      -adfDatumParm[3], -adfDatumParm[4], -adfDatumParm[5],                       adfDatumParm[6] );/* -------------------------------------------------------------------- *//*      Report on translation.                                          *//* -------------------------------------------------------------------- */    char        *pszWKT;    poSR->exportToWkt( &pszWKT );    if( pszWKT != NULL )    {        CPLDebug( "MITAB",                  "This CoordSys value:\n%s\nwas translated to:\n%s\n",                  pszCoordSys, pszWKT );        CPLFree( pszWKT );    }    CSLDestroy(papszFields);    return poSR;}/************************************************************************//*                      MITABSpatialRef2CoordSys()                      *//*                                                                      *//*      Converts a OGRSpatialReference object into a MIF COORDSYS       *//*      string.                                                         *//*                                                                      *//*      The function returns a newly allocated string that should be    *//*      CPLFree()'d by the caller.                                      *//************************************************************************/char *MITABSpatialRef2CoordSys( OGRSpatialReference * poSR ){    if( poSR == NULL )        return NULL;        /*-----------------------------------------------------------------     * Get the linear units.     *----------------------------------------------------------------*/    double      dfLinearConv;    char        *pszLinearUnits;    dfLinearConv = poSR->GetLinearUnits( &pszLinearUnits );    /*-----------------------------------------------------------------     * Transform the projection and projection parameters.     *----------------------------------------------------------------*/    const char *pszProjection = poSR->GetAttrValue("PROJECTION");    double      parms[10];    int         nProjection = 0;    int         nParmCount = 0;    if( pszProjection == NULL )    {        /*--------------------------------------------------------------         * NULL projection.           * We have 2 possibilities: CoordSys NonEarth or Lat/Lon          * NonEarth ... is an empty SpatialRef.           * Lat/Lon has no "PROJECTION" but GEOGCS is set         *-------------------------------------------------------------*/         if ( poSR->GetAttrValue("GEOGCS") == NULL)            nProjection = 0; // Non-Earth        else            nProjection = 1; // Lat/Lon    }    else if( EQUAL(pszProjection,SRS_PT_ALBERS_CONIC_EQUAL_AREA) )    {        nProjection = 9;        parms[0] = poSR->GetProjParm(SRS_PP_LONGITUDE_OF_CENTER,0.0);        parms[1] = poSR->GetProjParm(SRS_PP_LATITUDE_OF_CENTER,0.0);        parms[2] = poSR->GetProjParm(SRS_PP_STANDARD_PARALLEL_1,0.0);        parms[3] = poSR->GetProjParm(SRS_PP_STANDARD_PARALLEL_2,0.0);        parms[4] = poSR->GetProjParm(SRS_PP_FALSE_EASTING,0.0);        parms[5] = poSR->GetProjParm(SRS_PP_FALSE_NORTHING,0.0);        nParmCount = 6;    }    else if( EQUAL(pszProjection,SRS_PT_AZIMUTHAL_EQUIDISTANT) )    {        nProjection = 5;        parms[0] = poSR->GetProjParm(SRS_PP_LONGITUDE_OF_CENTER,0.0);        parms[1] = poSR->GetProjParm(SRS_PP_LATITUDE_OF_CENTER,0.0);        parms[2] = 90.0;        nParmCount = 3;        if( ABS((ABS(parms[1]) - 90)) > 0.001 )            nProjection = 28;    }    else if( EQUAL(pszProjection,SRS_PT_CYLINDRICAL_EQUAL_AREA) )    {        nProjection = 2;        parms[0] = poSR->GetProjParm(SRS_PP_CENTRAL_MERIDIAN,0.0);        parms[1] = poSR->GetProjParm(SRS_PP_STANDARD_PARALLEL_1,0.0);        nParmCount = 2;    }    else if( EQUAL(pszProjection,SRS_PT_ECKERT_IV) )    {        nProjection = 14;        parms[0] = poSR->GetProjParm(SRS_PP_CENTRAL_MERIDIAN,0.0);        nParmCount = 1;    }    else if( EQUAL(pszProjection,SRS_PT_ECKERT_VI) )    {        nProjection = 15;        parms[0] = poSR->GetProjParm(SRS_PP_CENTRAL_MERIDIAN,0.0);        nParmCount = 1;    }    else if( EQUAL(pszProjection,SRS_PT_EQUIDISTANT_CONIC) )    {        nProjection = 6;        parms[0] = poSR->GetProjParm(SRS_PP_LONGITUDE_OF_CENTER,0.0);        parms[1] = poSR->GetProjParm(SRS_PP_LATITUDE_OF_CENTER,0.0);        parms[2] = poSR->GetProjParm(SRS_PP_STANDARD_PARALLEL_1,0.0);        parms[3] = poSR->GetProjParm(SRS_PP_STANDARD_PARALLEL_2,0.0);        parms[4] = poSR->GetProjParm(SRS_PP_FALSE_EASTING,0.0);        parms[5] = poSR->GetProjParm(SRS_PP_FALSE_NORTHING,0.0);        nParmCount = 6;    }    else if( EQUAL(pszProjection,SRS_PT_GALL_STEREOGRAPHIC) )    {        nProjection = 17;        parms[0] = poSR->GetProjParm(SRS_PP_CENTRAL_MERIDIAN,0.0);        nParmCount = 1;    }    else if( EQUAL(pszProjection,SRS_PT_HOTINE_OBLIQUE_MERCATOR) )    {        nProjection = 7;        parms[0] = poSR->GetProjParm(SRS_PP_LONGITUDE_OF_CENTER,0.0);        parms[1] = poSR->GetProjParm(SRS_PP_LATITUDE_OF_CENTER,0.0);        parms[2] = poSR->GetProjParm(SRS_PP_AZIMUTH,0.0);        parms[3] = poSR->GetProjParm(SRS_PP_SCALE_FACTOR,1.0);        parms[4] = poSR->GetProjParm(SRS_PP_FALSE_EASTING,0.0);        parms[5] = poSR->GetProjParm(SRS_PP_FALSE_NORTHING,0.0);        nParmCount = 6;    }    else if( EQUAL(pszProjection,SRS_PT_LAMBERT_AZIMUTHAL_EQUAL_AREA) )    {        nProjection = 4;        parms[0] = poSR->GetProjParm(SRS_PP_LONGITUDE_OF_CENTER,0.0);        parms[1] = poSR->GetProjParm(SRS_PP_LATITUDE_OF_CENTER,0.0);        parms[2] = 90.0;        nParmCount = 3;        if( ABS((ABS(parms[1]) - 90)) > 0.001 )            nProjection = 28;    }    else if( EQUAL(pszProjection,SRS_PT_LAMBERT_CONFORMAL_CONIC_2SP) )    {        nProjection = 3;        parms[0] = poSR->GetProjParm(SRS_PP_CENTRAL_MERIDIAN,0.0);        parms[1] = poSR->GetProjParm(SRS_PP_LATITUDE_OF_ORIGIN,0.0);        parms[2] = poSR->GetProjParm(SRS_PP_STANDARD_PARALLEL_1,0.0);        parms[3] = poSR->GetProjParm(SRS_PP_STANDARD_PARALLEL_2,0.0);        parms[4] = poSR->GetProjParm(SRS_PP_FALSE_EASTING,0.0);        parms[5] = poSR->GetProjParm(SRS_PP_FALSE_NORTHING,0.0);        nParmCount = 6;    }    else if( EQUAL(pszProjection,SRS_PT_LAMBERT_CONFORMAL_CONIC_2SP_BELGIUM) )    {        nProjection = 19;        parms[0] = poSR->GetProjParm(SRS_PP_CENTRAL_MERIDIAN,0.0);        parms[1] = poSR->GetProjParm(SRS_PP_LATITUDE_OF_ORIGIN,0.0);        parms[2] = poSR->GetProjParm(SRS_PP_STANDARD_PARALLEL_1,0.0);        parms[3] = poSR->GetProjParm(SRS_PP_STANDARD_PARALLEL_2,0.0);        parms[4] = poSR->GetProjParm(SRS_PP_FALSE_EASTING,0.0);        parms[5] = poSR->GetProjParm(SRS_PP_FALSE_NORTHING,0.0);        nParmCount = 6;    }    else if( EQUAL(pszProjection,SRS_PT_MERCATOR_1SP) )    {        nProjection = 10;        parms[0] = poSR->GetProjParm(SRS_PP_CENTRAL_MERIDIAN,0.0);        parms[1] = poSR->GetProjParm(SRS_PP_LATITUDE_OF_ORIGIN,0.0);        nParmCount = 1;        if( parms[1] != 0.0 )        {            nProjection = 26;            nParmCount = 2;        }    }    else if( EQUAL(pszProjection,SRS_PT_MILLER_CYLINDRICAL) )    {        nProjection = 11;        parms[0] = poSR->GetProjParm(SRS_PP_LONGITUDE_OF_CENTER,0.0);        nParmCount = 1;    }    else if( EQUAL(pszProjection,SRS_PT_MOLLWEIDE) )    {        nProjection = 13;        parms[0] = poSR->GetProjParm(SRS_PP_CENTRAL_MERIDIAN,0.0);        nParmCount = 1;    }    else if( EQUAL(pszProjection,SRS_PT_SWISS_OBLIQUE_CYLINDRICAL) )    {        nProjection = 25;        parms[0] = poSR->GetProjParm(SRS_PP_CENTRAL_MERIDIAN,0.0);        parms[1] = poSR->GetProjParm(SRS_PP_LATITUDE_OF_ORIGIN,0.0);        parms[2] = poSR->GetProjParm(SRS_PP_FALSE_EASTING,0.0);        parms[3] = poSR->GetProjParm(SRS_PP_FALSE_NORTHING,0.0);        nParmCount = 4;    }    else if( EQUAL(pszProjection,SRS_PT_ROBINSON) )    {        nProjection = 12;        parms[0] = poSR->GetProjParm(SRS_PP_CENTRAL_MERIDIAN,0.0);        nParmCount = 1;    }    else if( EQUAL(pszProjection,SRS_PT_SINUSOIDAL) )    {        nProjection = 16;        parms[0] = poSR->GetProjParm(SRS_PP_CENTRAL_MERIDIAN,0.0);        nParmCount = 1;    }    else if( EQUAL(pszProjection,SRS_PT_STEREOGRAPHIC) )    {        nProjection = 20;        parms[0] = poSR->GetProjParm(SRS_PP_CENTRAL_MERIDIAN,0.0);        parms[1] = poSR->GetProjParm(SRS_PP_LATITUDE_OF_ORIGIN,0.0);        parms[2] = poSR->GetProjParm(SRS_PP_SCALE_FACTOR,1.0);        parms[3] = poSR->GetProjParm(SRS_PP_FALSE_EASTING,0.0);        parms[4] = poSR->GetProjParm(SRS_PP_FALSE_NORTHING,0.0);        nParmCount = 5;    }    else if( EQUAL(pszProjection,SRS_PT_TRANSVERSE_MERCATOR) )    {        nProjection = 8;        parms[0] = poSR->GetProjParm(SRS_PP_CENTRAL_MERIDIAN,0.0);        parms[1] = poSR->GetProjParm(SRS_PP_LATITUDE_OF_ORIGIN,0.0);        parms[2] = poSR->GetProjParm(SRS_PP_SCALE_FACTOR,1.0);        parms[3] = poSR->GetProjParm(SRS_PP_FALSE_EASTING,0.0);        parms[4] = poSR->GetProjParm(SRS_PP_FALSE_NORTHING,0.0);        nParmCount = 5;    }    // Transverse Mercator,(modified for Danish System 34 Jylland-Fyn)    else if( EQUAL(pszProjection,SRS_PT_TRANSVERSE_MERCATOR_MI_21) )    {       nProjection = 21;       parms[0] = poSR->GetProjParm(SRS_PP_CENTRAL_MERIDIAN,0.0);       parms[1] = poSR->GetProjParm(SRS_PP_LATITUDE_OF_ORIGIN,0.0);       parms[2] = poSR->GetProjParm(SRS_PP_SCALE_FACTOR,1.0);       parms[3] = poSR->GetProjParm(SRS_PP_FALSE_EASTING,0.0);       parms[4] = poSR->GetProjParm(SRS_PP_FALSE_NORTHING,0.0);       nParmCount = 5;    }    // Transverse Mercator,(modified for Danish System 34 Sjaelland)    else if( EQUAL(pszProjection,SRS_PT_TRANSVERSE_MERCATOR_MI_22) )    {       nProjection = 22;       parms[0] = poSR->GetProjParm(SRS_PP_CENTRAL_MERIDIAN,0.0);       parms[1] = poSR->GetProjParm(SRS_PP_LATITUDE_OF_ORIGIN,0.0);       parms[2] = poSR->GetProjParm(SRS_PP_SCALE_FACTOR,1.0);       parms[3] = poSR->GetProjParm(SRS_PP_FALSE_EASTING,0.0);       parms[4] = poSR->GetProjParm(SRS_PP_FALSE_NORTHING,0.0);       nParmCount = 5;    }    // Transverse Mercator,(modified for Danish System 34/45 Bornholm)    else if( EQUAL(pszProjection,SRS_PT_TRANSVERSE_MERCATOR_MI_23) )    {       nProjection = 23;       parms[0] = poSR->GetProjParm(SRS_PP_CENTRAL_MERIDIAN,0.0);       parms[1] = poSR->GetProjParm(SRS_PP_LATITUDE_OF_ORIGIN,0.0);       parms[2] = poSR->GetProjParm(SRS_PP_SCALE_FACTOR,1.0);       parms[3] = poSR->GetProjParm(SRS_PP_FALSE_EASTING,0.0);       parms[4] = poSR->GetProjParm(SRS_PP_FALSE_NORTHING,0.0);       nParmCount = 5;    }    // Transverse Mercator,(modified for Finnish KKJ)    else if( EQUAL(pszProjection,SRS_PT_TRANSVERSE_MERCATOR_MI_24) )    {       nProjection = 24;       parms[0] = poSR->GetProjParm(SRS_PP_CENTRAL_MERIDIAN,0.0);       parms[1] = poSR->GetProjParm(SRS_PP_LATITUDE_OF_ORIGIN,0.0);       parms[2] = poSR->GetProjParm(SRS_PP_SCALE_FACTOR,1.0);       parms[3] = poSR->GetProjParm(SRS_PP_FALSE_EASTING,0.0);       parms[4] = poSR->GetProjParm(SRS_PP_FALSE_NORTHING,0.0);       nParmCount = 5;    }    else if( EQUAL(pszProjection,SRS_PT_CASSINI_SOLDNER) )    {        nProjection = 30;        parms[0] = poSR->GetProjParm(SRS_PP_CENTRAL_MERIDIAN,0.0);        parms[1] = poSR->GetProjParm(SRS_PP_LATITUDE_OF_ORIGIN,0.0);        parms[2] = poSR->GetProjParm(SRS_PP_FALSE_EASTING,0.0);        parms[3] = poSR->GetProjParm(SRS_PP_FALSE_NORTHING,0.0);        nParmCount = 4;    }    else if( EQUAL(pszProjection,SRS_PT_NEW_ZEALAND_MAP_GRID) )    {        nProjection = 18;        parms[0] = poSR->GetProjParm(SRS_PP_CENTRAL_MERIDIAN,0.0);        parms[1] = poSR->GetProjParm(SRS_PP_LATITUDE_OF_ORIGIN,0.0);        parms[2] = poSR->GetProjParm(SRS_PP_FALSE_EASTING,0.0);        parms[3] = poSR->GetProjParm(SRS_PP_FALSE_NORTHING,0.0);        nParmCount = 4;    }    else if( EQUAL(pszProjection,SRS_PT_POLYCONIC) )    {        nProjection = 27;        parms[0] = poSR->GetProjParm(SRS_PP_CENTRAL_MERIDIAN,0.0);        parms[1] = poSR->GetProjParm(SRS_PP_LATITUDE_OF_ORIGIN,0.0);        parms[2] = poSR->GetProjParm(SRS_PP_FALSE_EASTING,0.0);        parms[3] = poSR->GetProjParm(SRS_PP_FALSE_NORTHING,0.0);        nParmCount = 4;    }    /* ==============================================================     * Translate Datum and Ellipsoid     * ============================================================== */    int         nDatum = 0;    double      adfDatumParm[8] = {0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0};    int         nEllipsoid=0;        const char *pszWKTDatum = poSR->GetAttrValue("DATUM");    if( pszWKTDatum == NULL )    {        nDatum = 0;        if( nProjection == 1 )            nProjection = 0;    }        /*-----------------------------------------------------------------     * We know the MIF datum number, and need to look it up to     * translate into datum parameters.     *----------------------------------------------------------------*/    else if( EQUALN(pszWKTDatum,"MIF ",4)             && atoi(pszWKTDatum+4) != 999             && atoi(pszWKTDatum+4) != 9999 )    {        nDatum = atoi(pszWKTDatum+4);

⌨️ 快捷键说明

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