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

📄 mitab_spatialref.cpp

📁 GIS系统支持库Geospatial Data Abstraction Library代码.GDAL is a translator library for raster geospatial dat
💻 CPP
📖 第 1 页 / 共 4 页
字号:
        if( ABS((ABS(parms[1]) - 90)) > 0.001 )            sTABProj.nProjId = 28;    }    else if( EQUAL(pszProjection,SRS_PT_CYLINDRICAL_EQUAL_AREA) )    {        sTABProj.nProjId = 2;        parms[0] = poSpatialRef->GetProjParm(SRS_PP_CENTRAL_MERIDIAN,0.0);        parms[1] = poSpatialRef->GetProjParm(SRS_PP_STANDARD_PARALLEL_1,0.0);    }    else if( EQUAL(pszProjection,SRS_PT_ECKERT_IV) )    {        sTABProj.nProjId = 14;        parms[0] = poSpatialRef->GetProjParm(SRS_PP_CENTRAL_MERIDIAN,0.0);    }    else if( EQUAL(pszProjection,SRS_PT_ECKERT_VI) )    {        sTABProj.nProjId = 15;        parms[0] = poSpatialRef->GetProjParm(SRS_PP_CENTRAL_MERIDIAN,0.0);    }    else if( EQUAL(pszProjection,SRS_PT_EQUIDISTANT_CONIC) )    {        sTABProj.nProjId = 6;        parms[0] = poSpatialRef->GetProjParm(SRS_PP_LONGITUDE_OF_CENTER,0.0);        parms[1] = poSpatialRef->GetProjParm(SRS_PP_LATITUDE_OF_CENTER,0.0);        parms[2] = poSpatialRef->GetProjParm(SRS_PP_STANDARD_PARALLEL_1,0.0);        parms[3] = poSpatialRef->GetProjParm(SRS_PP_STANDARD_PARALLEL_2,0.0);        parms[4] = poSpatialRef->GetProjParm(SRS_PP_FALSE_EASTING,0.0) / dfLinearConv;        parms[5] = poSpatialRef->GetProjParm(SRS_PP_FALSE_NORTHING,0.0) / dfLinearConv;    }    else if( EQUAL(pszProjection,SRS_PT_GALL_STEREOGRAPHIC) )    {        sTABProj.nProjId = 17;        parms[0] = poSpatialRef->GetProjParm(SRS_PP_CENTRAL_MERIDIAN,0.0);    }    else if( EQUAL(pszProjection,SRS_PT_HOTINE_OBLIQUE_MERCATOR) )    {        sTABProj.nProjId = 7;        parms[0] = poSpatialRef->GetProjParm(SRS_PP_LONGITUDE_OF_CENTER,0.0);        parms[1] = poSpatialRef->GetProjParm(SRS_PP_LATITUDE_OF_CENTER,0.0);        parms[2] = poSpatialRef->GetProjParm(SRS_PP_AZIMUTH,0.0);        parms[3] = poSpatialRef->GetProjParm(SRS_PP_SCALE_FACTOR,1.0);        parms[4] = poSpatialRef->GetProjParm(SRS_PP_FALSE_EASTING,0.0) / dfLinearConv;        parms[5] = poSpatialRef->GetProjParm(SRS_PP_FALSE_NORTHING,0.0) / dfLinearConv;    }    else if( EQUAL(pszProjection,SRS_PT_LAMBERT_AZIMUTHAL_EQUAL_AREA) )    {        sTABProj.nProjId = 4;        parms[0] = poSpatialRef->GetProjParm(SRS_PP_LONGITUDE_OF_CENTER,0.0);        parms[1] = poSpatialRef->GetProjParm(SRS_PP_LATITUDE_OF_CENTER,0.0);        parms[2] = 90.0;        if( ABS((ABS(parms[1]) - 90)) > 0.001 )            sTABProj.nProjId = 28;    }    else if( EQUAL(pszProjection,SRS_PT_LAMBERT_CONFORMAL_CONIC_2SP) )    {        sTABProj.nProjId = 3;        parms[0] = poSpatialRef->GetProjParm(SRS_PP_CENTRAL_MERIDIAN,0.0);        parms[1] = poSpatialRef->GetProjParm(SRS_PP_LATITUDE_OF_ORIGIN,0.0);        parms[2] = poSpatialRef->GetProjParm(SRS_PP_STANDARD_PARALLEL_1,0.0);        parms[3] = poSpatialRef->GetProjParm(SRS_PP_STANDARD_PARALLEL_2,0.0);        parms[4] = poSpatialRef->GetProjParm(SRS_PP_FALSE_EASTING,0.0) / dfLinearConv;        parms[5] = poSpatialRef->GetProjParm(SRS_PP_FALSE_NORTHING,0.0) / dfLinearConv;    }    else if( EQUAL(pszProjection,SRS_PT_LAMBERT_CONFORMAL_CONIC_2SP_BELGIUM) )    {        sTABProj.nProjId = 19;        parms[0] = poSpatialRef->GetProjParm(SRS_PP_CENTRAL_MERIDIAN,0.0);        parms[1] = poSpatialRef->GetProjParm(SRS_PP_LATITUDE_OF_ORIGIN,0.0);        parms[2] = poSpatialRef->GetProjParm(SRS_PP_STANDARD_PARALLEL_1,0.0);        parms[3] = poSpatialRef->GetProjParm(SRS_PP_STANDARD_PARALLEL_2,0.0);        parms[4] = poSpatialRef->GetProjParm(SRS_PP_FALSE_EASTING,0.0) / dfLinearConv;        parms[5] = poSpatialRef->GetProjParm(SRS_PP_FALSE_NORTHING,0.0) / dfLinearConv;    }    else if( EQUAL(pszProjection,SRS_PT_MERCATOR_1SP) )    {        sTABProj.nProjId = 10;        parms[0] = poSpatialRef->GetProjParm(SRS_PP_CENTRAL_MERIDIAN,0.0);        parms[1] = poSpatialRef->GetProjParm(SRS_PP_LATITUDE_OF_ORIGIN,0.0);        parms[2] = poSpatialRef->GetProjParm(SRS_PP_SCALE_FACTOR,1.0);        if( parms[1] != 0.0 )            sTABProj.nProjId = 26;    }    else if( EQUAL(pszProjection,SRS_PT_MILLER_CYLINDRICAL) )    {        sTABProj.nProjId = 11;        parms[0] = poSpatialRef->GetProjParm(SRS_PP_LONGITUDE_OF_CENTER,0.0);    }    else if( EQUAL(pszProjection,SRS_PT_MOLLWEIDE) )    {        sTABProj.nProjId = 13;        parms[0] = poSpatialRef->GetProjParm(SRS_PP_CENTRAL_MERIDIAN,0.0);    }    else if( EQUAL(pszProjection,SRS_PT_NEW_ZEALAND_MAP_GRID) )    {        sTABProj.nProjId = 18;        parms[0] = poSpatialRef->GetProjParm(SRS_PP_CENTRAL_MERIDIAN,0.0);        parms[1] = poSpatialRef->GetProjParm(SRS_PP_LATITUDE_OF_ORIGIN,0.0);        parms[2] = poSpatialRef->GetProjParm(SRS_PP_FALSE_EASTING,0.0) / dfLinearConv;        parms[3] = poSpatialRef->GetProjParm(SRS_PP_FALSE_NORTHING,0.0) / dfLinearConv;    }    else if( EQUAL(pszProjection,SRS_PT_SWISS_OBLIQUE_CYLINDRICAL) )    {        sTABProj.nProjId = 25;        parms[0] = poSpatialRef->GetProjParm(SRS_PP_CENTRAL_MERIDIAN,0.0);        parms[1] = poSpatialRef->GetProjParm(SRS_PP_LATITUDE_OF_ORIGIN,0.0);        parms[2] = poSpatialRef->GetProjParm(SRS_PP_FALSE_EASTING,0.0) / dfLinearConv;        parms[3] = poSpatialRef->GetProjParm(SRS_PP_FALSE_NORTHING,0.0) / dfLinearConv;    }    else if( EQUAL(pszProjection,SRS_PT_ROBINSON) )    {        sTABProj.nProjId = 12;        parms[0] = poSpatialRef->GetProjParm(SRS_PP_CENTRAL_MERIDIAN,0.0);    }    else if( EQUAL(pszProjection,SRS_PT_SINUSOIDAL) )    {        sTABProj.nProjId = 16;        parms[0] = poSpatialRef->GetProjParm(SRS_PP_CENTRAL_MERIDIAN,0.0);    }    else if( EQUAL(pszProjection,SRS_PT_STEREOGRAPHIC) )    {        sTABProj.nProjId = 20;        parms[0] = poSpatialRef->GetProjParm(SRS_PP_CENTRAL_MERIDIAN,0.0);        parms[1] = poSpatialRef->GetProjParm(SRS_PP_LATITUDE_OF_ORIGIN,0.0);        parms[2] = poSpatialRef->GetProjParm(SRS_PP_SCALE_FACTOR,1.0);        parms[3] = poSpatialRef->GetProjParm(SRS_PP_FALSE_EASTING,0.0) / dfLinearConv;        parms[4] = poSpatialRef->GetProjParm(SRS_PP_FALSE_NORTHING,0.0) / dfLinearConv;    }    else if( EQUAL(pszProjection,SRS_PT_TRANSVERSE_MERCATOR) )    {        sTABProj.nProjId = 8;        parms[0] = poSpatialRef->GetProjParm(SRS_PP_CENTRAL_MERIDIAN,0.0);        parms[1] = poSpatialRef->GetProjParm(SRS_PP_LATITUDE_OF_ORIGIN,0.0);        parms[2] = poSpatialRef->GetProjParm(SRS_PP_SCALE_FACTOR,1.0);        parms[3] = poSpatialRef->GetProjParm(SRS_PP_FALSE_EASTING,0.0) / dfLinearConv;        parms[4] = poSpatialRef->GetProjParm(SRS_PP_FALSE_NORTHING,0.0) / dfLinearConv;    }    else if( EQUAL(pszProjection,SRS_PT_CASSINI_SOLDNER) )    {        sTABProj.nProjId = 30;        parms[0] = poSpatialRef->GetProjParm(SRS_PP_CENTRAL_MERIDIAN,0.0);        parms[1] = poSpatialRef->GetProjParm(SRS_PP_LATITUDE_OF_ORIGIN,0.0);        parms[2] = poSpatialRef->GetProjParm(SRS_PP_FALSE_EASTING,0.0)             / dfLinearConv;        parms[3] = poSpatialRef->GetProjParm(SRS_PP_FALSE_NORTHING,0.0)             / dfLinearConv;    }    else if( EQUAL(pszProjection,SRS_PT_NEW_ZEALAND_MAP_GRID) )    {        sTABProj.nProjId = 18;        parms[0] = poSpatialRef->GetProjParm(SRS_PP_CENTRAL_MERIDIAN,0.0);        parms[1] = poSpatialRef->GetProjParm(SRS_PP_LATITUDE_OF_ORIGIN,0.0);        parms[2] = poSpatialRef->GetProjParm(SRS_PP_FALSE_EASTING,0.0)             / dfLinearConv;        parms[3] = poSpatialRef->GetProjParm(SRS_PP_FALSE_NORTHING,0.0)             / dfLinearConv;    }    else if( EQUAL(pszProjection,SRS_PT_POLYCONIC) )    {        sTABProj.nProjId = 27;        parms[0] = poSpatialRef->GetProjParm(SRS_PP_CENTRAL_MERIDIAN,0.0);        parms[1] = poSpatialRef->GetProjParm(SRS_PP_LATITUDE_OF_ORIGIN,0.0);        parms[2] = poSpatialRef->GetProjParm(SRS_PP_FALSE_EASTING,0.0)             / dfLinearConv;        parms[3] = poSpatialRef->GetProjParm(SRS_PP_FALSE_NORTHING,0.0)             / dfLinearConv;    }    /* ==============================================================     * Translate Datum and Ellipsoid     * ============================================================== */    const char *pszWKTDatum = poSpatialRef->GetAttrValue("DATUM");    MapInfoDatumInfo *psDatumInfo = NULL;        /*-----------------------------------------------------------------     * Default to WGS83 if we have no datum at all.     *----------------------------------------------------------------*/    if( pszWKTDatum == NULL )    {        psDatumInfo = asDatumInfoList+0; /* WGS 84 */    }        /*-----------------------------------------------------------------     * 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 )    {        int     i;        for( i = 0; asDatumInfoList[i].nMapInfoDatumID != -1; i++ )        {            if( atoi(pszWKTDatum+4) == asDatumInfoList[i].nMapInfoDatumID )            {                psDatumInfo = asDatumInfoList + i;                break;            }        }        if( psDatumInfo == NULL )            psDatumInfo = asDatumInfoList+0; /* WGS 84 */    }    /*-----------------------------------------------------------------     * We have the MIF datum parameters, and apply those directly.     *----------------------------------------------------------------*/    else if( EQUALN(pszWKTDatum,"MIF ",4)             && (atoi(pszWKTDatum+4) == 999 || atoi(pszWKTDatum+4) == 9999) )    {        char **papszFields;        papszFields =            CSLTokenizeStringComplex( pszWKTDatum+4, ",", FALSE, TRUE);        if( CSLCount(papszFields) >= 5 )        {            sTABProj.nEllipsoidId = atoi(papszFields[1]);            sTABProj.dDatumShiftX = atof(papszFields[2]);            sTABProj.dDatumShiftY = atof(papszFields[3]);            sTABProj.dDatumShiftZ = atof(papszFields[4]);        }        if( CSLCount(papszFields) >= 10 )        {            sTABProj.adDatumParams[0] = atof(papszFields[5]);            sTABProj.adDatumParams[1] = atof(papszFields[6]);            sTABProj.adDatumParams[2] = atof(papszFields[7]);            sTABProj.adDatumParams[3] = atof(papszFields[8]);            sTABProj.adDatumParams[4] = atof(papszFields[9]);        }        if( CSLCount(papszFields) < 5 )            psDatumInfo = asDatumInfoList+0; /* WKS84 */        CSLDestroy( papszFields );    }        /*-----------------------------------------------------------------     * We have a "real" datum name.  Try to look it up and get the     * parameters.  If we don't find it just use WGS84.     *----------------------------------------------------------------*/    else     {        int     i;        for( i = 0; asDatumInfoList[i].nMapInfoDatumID != -1; i++ )        {            if( EQUAL(pszWKTDatum,asDatumInfoList[i].pszOGCDatumName) )            {                psDatumInfo = asDatumInfoList + i;                break;            }        }         if( psDatumInfo == NULL )            psDatumInfo = asDatumInfoList+0; /* WGS 84 */    }    if( psDatumInfo != NULL )    {        sTABProj.nEllipsoidId = psDatumInfo->nEllipsoid;        sTABProj.dDatumShiftX = psDatumInfo->dfShiftX;        sTABProj.dDatumShiftY = psDatumInfo->dfShiftY;        sTABProj.dDatumShiftZ = psDatumInfo->dfShiftZ;        sTABProj.adDatumParams[0] = psDatumInfo->dfDatumParm0;        sTABProj.adDatumParams[1] = psDatumInfo->dfDatumParm1;        sTABProj.adDatumParams[2] = psDatumInfo->dfDatumParm2;        sTABProj.adDatumParams[3] = psDatumInfo->dfDatumParm3;        sTABProj.adDatumParams[4] = psDatumInfo->dfDatumParm4;    }        /*-----------------------------------------------------------------     * Translate the units     *----------------------------------------------------------------*/    if( sTABProj.nProjId == 1 || pszLinearUnits == NULL )        sTABProj.nUnitsId = 13;    else if( dfLinearConv == 1000.0 )        sTABProj.nUnitsId = 1;    else if( dfLinearConv == 0.0254 || EQUAL(pszLinearUnits,"Inch")             || EQUAL(pszLinearUnits,"IINCH") )        sTABProj.nUnitsId = 2;    else if( dfLinearConv == atof(SRS_UL_FOOT_CONV)             || EQUAL(pszLinearUnits,SRS_UL_FOOT) )        sTABProj.nUnitsId = 3;    else if( EQUAL(pszLinearUnits,"YARD") || EQUAL(pszLinearUnits,"IYARD")              || dfLinearConv == 0.9144 )        sTABProj.nUnitsId = 4;    else if( dfLinearConv == 0.001 )        sTABProj.nUnitsId = 5;    else if( dfLinearConv == 0.01 )        sTABProj.nUnitsId = 6;    else if( dfLinearConv == 1.0 )        sTABProj.nUnitsId = 7;    else if( dfLinearConv == atof(SRS_UL_US_FOOT_CONV)             || EQUAL(pszLinearUnits,SRS_UL_US_FOOT) )        sTABProj.nUnitsId = 8;    else if( EQUAL(pszLinearUnits,SRS_UL_NAUTICAL_MILE) )        sTABProj.nUnitsId = 9;    else if( EQUAL(pszLinearUnits,SRS_UL_LINK)              || EQUAL(pszLinearUnits,"GUNTERLINK") )        sTABProj.nUnitsId = 30;    else if( EQUAL(pszLinearUnits,SRS_UL_CHAIN)              || EQUAL(pszLinearUnits,"GUNTERCHAIN") )        sTABProj.nUnitsId = 31;    else if( EQUAL(pszLinearUnits,SRS_UL_ROD) )        sTABProj.nUnitsId = 32;    else if( EQUAL(pszLinearUnits,"Mile")              || EQUAL(pszLinearUnits,"IMILE") )        sTABProj.nUnitsId = 0;    else        sTABProj.nUnitsId = 7;        /*-----------------------------------------------------------------     * Set the new parameters in the .MAP header.     * This will also trigger lookup of default bounds for the projection.     *----------------------------------------------------------------*/    if ( SetProjInfo( &sTABProj ) != 0 )    {        CPLError(CE_Failure, CPLE_FileIO,                 "SetSpatialRef() failed setting projection parameters.");        return -1;    }    return 0;}

⌨️ 快捷键说明

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