亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? mitab_coordsys.cpp

?? mitab,讀取MapInfo的地圖文件
?? CPP
?? 第 1 頁 / 共 4 頁
字號:
/**********************************************************************
 * $Id: mitab_coordsys.cpp,v 1.36 2007/11/21 21:15:45 dmorissette Exp $
 *
 * Name:     mitab_coordsys.cpp
 * Project:  MapInfo TAB Read/Write library
 * Language: C++
 * Purpose:  Implementation translation between MIF CoordSys format, and
 *           and OGRSpatialRef format.
 * Author:   Frank Warmerdam, warmerdam@pobox.com
 *
 **********************************************************************
 * Copyright (c) 1999-2001, Frank Warmerdam
 *
 * Permission is hereby granted, free of charge, to any person obtaining a
 * copy of this software and associated documentation files (the "Software"),
 * to deal in the Software without restriction, including without limitation
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 * and/or sell copies of the Software, and to permit persons to whom the
 * Software is furnished to do so, subject to the following conditions:
 * 
 * The above copyright notice and this permission notice shall be included
 * in all copies or substantial portions of the Software.
 * 
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
 * DEALINGS IN THE SOFTWARE.
 **********************************************************************
 *
 * $Log: mitab_coordsys.cpp,v $
 * Revision 1.36  2007/11/21 21:15:45  dmorissette
 * Fix asDatumInfoList[] and asSpheroidInfoList[] defns/refs (bug 1826)
 *
 * Revision 1.35  2007/06/21 13:23:43  fwarmerdam
 * Fixed support for predefined datums with non-greenwich prime meridians
 *
 * Revision 1.34  2006/03/10 19:50:45  fwarmerdam
 * Coordsys false easting and northing are in the units of the coordsys, not
 * necessarily meters.  Adjusted mitab_coordsys.cpp to reflect this.
 * http://bugzilla.remotesensing.org/show_bug.cgi?id=1113
 *
 * Revision 1.33  2005/09/29 20:13:57  dmorissette
 * MITABCoordSys2SpatialRef() patches from Anthony D (bug 1155):
 * Improved support for modified TM projections 21-24.
 * Added support for affine parameters (inside #ifdef MITAB_AFFINE_PARAMS since
 * affine params cannot be stored directly in OGRSpatialReference)
 *
 * Revision 1.32  2005/08/07 21:00:38  fwarmerdam
 * Initialize adfDatumParm[] to avoid warnings with gcc 4.
 *
 * Revision 1.31  2005/05/12 22:07:52  dmorissette
 * Improved handling of Danish modified TM proj#21-24 (hss, bugs 976,1010)
 *
 * Revision 1.30  2005/03/22 23:24:54  dmorissette
 * Added support for datum id in .MAP header (bug 910)
 *
 * Revision 1.29  2004/06/03 19:36:53  fwarmerdam
 * fixed memory leak processing non-earth coordsys
 *
 * Revision 1.28  2003/03/21 14:20:42  warmerda
 * fixed up regional mercator handling, was screwing up transverse mercator
 *
 * Revision 1.27  2003/01/09 17:33:26  warmerda
 * fixed ellipsoid extraction for datum 999/9999
 *
 * Revision 1.26  2002/12/12 20:12:18  warmerda
 * fixed signs of rotational parameters for TOWGS84 in WKT
 *
 * Revision 1.25  2002/10/15 14:33:30  warmerda
 * Added untested support in mitab_spatialref.cpp, and mitab_coordsys.cpp for
 * projections Regional Mercator (26), Polyconic (27), Azimuthal Equidistant -
 * All origin latitudes (28), and Lambert Azimuthal Equal Area - any aspect (29).
 *
 * Revision 1.24  2002/09/23 13:16:04  warmerda
 * fixed leak in MITABExtractCoordSysBounds()
 *
 * Revision 1.23  2002/04/01 19:49:24  warmerda
 * added support for cassini/soldner - proj 30
 *
 * Revision 1.22  2002/03/01 19:00:15  warmerda
 * False Easting/Northing should be in the linear units of measure in MapInfo,
 * but in OGRSpatialReference/WKT they are always in meters.  Convert accordingly.
 *
 * Revision 1.21  2001/04/04 21:43:19  warmerda
 * added code to set WGS84 values
 *
 * Revision 1.20  2001/01/23 21:23:42  daniel
 * Added projection bounds lookup table, called from TABFile::SetProjInfo()
 *
 * Revision 1.19  2001/01/22 16:00:53  warmerda
 * reworked swiss projection support
 *
 * Revision 1.18  2001/01/19 21:56:18  warmerda
 * added untested support for Swiss Oblique Mercator
 **********************************************************************/

#include "mitab.h"
#include "mitab_utils.h"

extern MapInfoDatumInfo asDatumInfoList[];
extern MapInfoSpheroidInfo asSpheroidInfoList[];

/************************************************************************/
/*                             GetMIFParm()                             */
/************************************************************************/

static double GetMIFParm( char ** papszFields, int iField, double dfDefault )

{
    if( iField >= CSLCount(papszFields) )
        return dfDefault;
    else
        return atof(papszFields[iField]);
}

/************************************************************************/
/*                      MITABCoordSys2SpatialRef()                      */
/*                                                                      */
/*      Convert a MIF COORDSYS string into a new OGRSpatialReference    */
/*      object.                                                         */
/************************************************************************/

OGRSpatialReference *MITABCoordSys2SpatialRef( const char * pszCoordSys )

{
    char        **papszFields;
    OGRSpatialReference *poSR;

#ifdef MITAB_AFFINE_PARAMS  // See MITAB bug 1155
    // Encom 2003
    int nAffineUnits = 7;
    double dAffineParams[6];
#endif

    if( pszCoordSys == NULL )
        return NULL;
    
/* -------------------------------------------------------------------- */
/*      Parse the passed string into words.                             */
/* -------------------------------------------------------------------- */
    while(*pszCoordSys == ' ') pszCoordSys++;  // Eat leading spaces
    if( EQUALN(pszCoordSys,"CoordSys",8) )
        pszCoordSys += 9;
    
    papszFields = CSLTokenizeStringComplex( pszCoordSys, " ,", TRUE, FALSE );

#ifdef MITAB_AFFINE_PARAMS  // See MITAB bug 1155
/* -------------------------------------------------------------------- */
/*      Store and then clip off Affine information. - Encom 2003        */
/* -------------------------------------------------------------------- */
    int         iAffine = CSLFindString( papszFields, "Affine" );
    int         nAffineIndex = 0;
    int         nAffineFlag = 0;

    while( iAffine != -1 && papszFields[iAffine] != NULL )
    {
        nAffineFlag = 1;
        if (nAffineIndex<2)
        {
            // Ignore "Affine Units"
        }
        else if (nAffineIndex==2)
        {
            // Convert units to integer (TBD)
            nAffineUnits = TABUnitIdFromString(papszFields[iAffine]);
            if (nAffineUnits==-1) nAffineUnits = 7; // metres is default
        }
        else if (nAffineIndex<=8)
        {
            // Store affine params
            dAffineParams[nAffineIndex-3] = atof(papszFields[iAffine]);
        }
        nAffineIndex++;

        CPLFree( papszFields[iAffine] );
        papszFields[iAffine] = NULL;
        iAffine++;
    }
#endif // MITAB_AFFINE_PARAMS

/* -------------------------------------------------------------------- */
/*      Clip off Bounds information.                                    */
/* -------------------------------------------------------------------- */
    int         iBounds = CSLFindString( papszFields, "Bounds" );

    while( iBounds != -1 && papszFields[iBounds] != NULL )
    {
        CPLFree( papszFields[iBounds] );
        papszFields[iBounds] = NULL;
        iBounds++;
    }

/* -------------------------------------------------------------------- */
/*      Create a spatialreference object to operate on.                 */
/* -------------------------------------------------------------------- */
    poSR = new OGRSpatialReference;

#ifdef MITAB_AFFINE_PARAMS  // See MITAB bug 1155
    // Encom 2003
    if (nAffineFlag)
    {
        poSR->nAffineFlag = 1;
        poSR->nAffineUnit = nAffineUnits;
        poSR->dAffineParamA = dAffineParams[0];
        poSR->dAffineParamB = dAffineParams[1];
        poSR->dAffineParamC = dAffineParams[2];
        poSR->dAffineParamD = dAffineParams[3];
        poSR->dAffineParamE = dAffineParams[4];
        poSR->dAffineParamF = dAffineParams[5];
    }
    else
    {
        poSR->nAffineFlag = 0; // Encom 2005
    }
#endif

/* -------------------------------------------------------------------- */
/*      Fetch the projection.                                           */
/* -------------------------------------------------------------------- */
    char        **papszNextField;
    int nProjection = 0;

    if( CSLCount( papszFields ) >= 3
        && EQUAL(papszFields[0],"Earth")
        && EQUAL(papszFields[1],"Projection") )
    {
        nProjection = atoi(papszFields[2]);
        papszNextField = papszFields + 3;
    }
    else if (CSLCount( papszFields ) >= 2
             && EQUAL(papszFields[0],"NonEarth") )
    {
        // NonEarth Units "..." Bounds (x, y) (x, y)
        nProjection = 0;
        papszNextField = papszFields + 2;

        if( papszNextField[0] != NULL && EQUAL(papszNextField[0],"Units") )
            papszNextField++;
    }
    else
    {
        // Invalid projection string ???
        if (CSLCount(papszFields) > 0)
            CPLError(CE_Warning, CPLE_IllegalArg,
                     "Failed parsing CoordSys: '%s'", pszCoordSys);
        CSLDestroy(papszFields);
        return NULL;
    }

/* -------------------------------------------------------------------- */
/*      Fetch the datum information.                                    */
/* -------------------------------------------------------------------- */
    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;

    if( nProjection != 0 && CSLCount(papszNextField) > 0 )
    {
        nDatum = atoi(papszNextField[0]);
        papszNextField++;
    }

    if( (nDatum == 999 || nDatum == 9999)
        && CSLCount(papszNextField) >= 4 )
    {
        nEllipsoid = atoi(papszNextField[0]);
        adfDatumParm[0] = atof(papszNextField[1]);
        adfDatumParm[1] = atof(papszNextField[2]);
        adfDatumParm[2] = atof(papszNextField[3]);
        papszNextField += 4;
    }

    if( nDatum == 9999
        && CSLCount(papszNextField) >= 5 )
    {
        adfDatumParm[3] = atof(papszNextField[0]);
        adfDatumParm[4] = atof(papszNextField[1]);
        adfDatumParm[5] = atof(papszNextField[2]);
        adfDatumParm[6] = atof(papszNextField[3]);
        adfDatumParm[7] = atof(papszNextField[4]);
        papszNextField += 5;
    }

/* -------------------------------------------------------------------- */
/*      Fetch the units string.                                         */
/* -------------------------------------------------------------------- */
    const char  *pszMIFUnits = NULL;
    const char  *pszUnitsName = NULL;
    double dfUnitsConv = 1.0;
    
    if( CSLCount(papszNextField) > 0 )
    {
        pszMIFUnits = papszNextField[0];
        papszNextField++;
    }

    if( nProjection == 1 || pszMIFUnits == NULL )
        /* do nothing */;
    else if( EQUAL(pszMIFUnits,"km") )
    {
        pszUnitsName = "Kilometer"; 
        dfUnitsConv = 1000.0;
    }
    else if( EQUAL(pszMIFUnits, "in" ) )
    {
        pszUnitsName = "IINCH"; 
        dfUnitsConv = 0.0254; 
    }
    else if( EQUAL(pszMIFUnits, "ft" ) )
    {
        pszUnitsName = SRS_UL_FOOT;
        dfUnitsConv = atof(SRS_UL_FOOT_CONV);
    }
    else if( EQUAL(pszMIFUnits, "yd" ) )
    {
        pszUnitsName = "IYARD";
        dfUnitsConv = 0.9144;
    }
    else if( EQUAL(pszMIFUnits, "mm" ) )
    {
        pszUnitsName = "Millimeter";
        dfUnitsConv = 0.001;
    }
    else if( EQUAL(pszMIFUnits, "cm" ) )
    {
        pszUnitsName = "Centimeter";
        dfUnitsConv = 0.01;
    }
    else if( EQUAL(pszMIFUnits, "m" ) )
    {
        pszUnitsName = SRS_UL_METER;
        dfUnitsConv = 1.0;
    }   
    else if( EQUAL(pszMIFUnits, "survey foot" )
             || EQUAL(pszMIFUnits, "survey ft" ) )
    {
        pszUnitsName = SRS_UL_US_FOOT;
        dfUnitsConv = atof(SRS_UL_US_FOOT_CONV);
    }   
    else if( EQUAL(pszMIFUnits, "nmi" ) )
    {
        pszUnitsName = SRS_UL_NAUTICAL_MILE;
        dfUnitsConv = atof(SRS_UL_NAUTICAL_MILE_CONV);
    }   
    else if( EQUAL(pszMIFUnits, "li" ) )
    {
        pszUnitsName = SRS_UL_LINK;
        dfUnitsConv = atof(SRS_UL_LINK_CONV);
    }
    else if( EQUAL(pszMIFUnits, "ch" ) )
    {
        pszUnitsName = SRS_UL_CHAIN;
        dfUnitsConv = atof(SRS_UL_CHAIN_CONV);
    }   
    else if( EQUAL(pszMIFUnits, "rd" ) )
    {
        pszUnitsName = SRS_UL_ROD;
        dfUnitsConv = atof(SRS_UL_ROD);
    }   
    else if( EQUAL(pszMIFUnits, "mi" ) )
    {
        pszUnitsName = "Mile";
        dfUnitsConv = 1609.344;
    }

/* -------------------------------------------------------------------- */
/*      Handle the PROJCS style projections, but add the datum          */
/*      later.                                                          */
/*                                                                      */
/*      Note that per GDAL bug 1113 the false easting and north are     */
/*      in local units, not necessarily meters.                         */
/* -------------------------------------------------------------------- */
    switch( nProjection )
    {
        /*--------------------------------------------------------------
         * NonEarth ... we return with an empty SpatialRef.  Eventually
         * we might want to include the units, but not for now.
         *
         * __TODO__ Changed to return NULL because returning an empty
         * SpatialRef caused confusion between Latlon and NonEarth since
         * empty SpatialRefs do have a GEOGCS set and makes them look like
         * Lat/Lon SpatialRefs.
         *
         * Ideally we would like to return a SpatialRef whith no GEGOCS
         *-------------------------------------------------------------*/
      case 0:

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产在线播放一区| 欧美日韩在线电影| 国产精品一区二区在线看| 久久er99精品| 国产一区二区三区免费| 国产一区二区三区四区五区美女 | 精品国产sm最大网站免费看| 91麻豆精品国产91久久久久久 | 欧美日韩在线电影| 欧美日韩精品一区二区三区四区| 欧洲一区在线电影| 欧美片网站yy| 日韩欧美亚洲国产精品字幕久久久| 69堂亚洲精品首页| 欧美一级在线免费| 精品av综合导航| 国产日韩亚洲欧美综合| 日本一二三四高清不卡| 国产精品第一页第二页第三页| 国产精品国产精品国产专区不蜜| 中文字幕一区二区三区精华液| 亚洲日本免费电影| 亚洲电影激情视频网站| 看电影不卡的网站| 国产精品123| 色妞www精品视频| 欧美人动与zoxxxx乱| 欧美成人艳星乳罩| 国产精品初高中害羞小美女文| 亚洲女与黑人做爰| 日韩和欧美的一区| 国产一区二区三区美女| 中文在线资源观看网站视频免费不卡| 国产精品乱码妇女bbbb| 亚洲在线成人精品| 视频一区二区中文字幕| 国产麻豆精品theporn| 色综合天天综合给合国产| 欧美麻豆精品久久久久久| 精品美女被调教视频大全网站| 国产欧美日韩亚州综合| 一区二区久久久久久| 久久精品理论片| 91麻豆国产精品久久| 日韩视频一区在线观看| 国产精品色婷婷久久58| 亚洲一区二区三区不卡国产欧美| 黄色日韩三级电影| 色噜噜偷拍精品综合在线| 欧美一二三区在线观看| 国产精品九色蝌蚪自拍| 青青草原综合久久大伊人精品 | 在线观看欧美黄色| 欧美va亚洲va| 亚洲在线视频一区| 国产精品2024| 欧美精品丝袜中出| 国产精品视频看| 奇米影视一区二区三区| 99久久综合精品| 精品噜噜噜噜久久久久久久久试看 | 国产成人亚洲综合a∨猫咪| 日本韩国精品一区二区在线观看| 欧美电视剧免费观看| 一区二区三区视频在线看| 国产一区欧美日韩| 91精品免费在线观看| 亚洲欧美在线视频| 国产在线观看一区二区| 欧美精三区欧美精三区 | 大尺度一区二区| 日韩视频免费观看高清完整版| 亚洲视频免费在线| 国产一区不卡视频| 日韩欧美国产综合| 亚洲v中文字幕| 91免费看`日韩一区二区| 久久精品在线观看| 精油按摩中文字幕久久| 欧美三级三级三级爽爽爽| 最新欧美精品一区二区三区| 韩国一区二区三区| 欧美一区二区三区视频免费| 一区二区三区精品| 99精品1区2区| 国产精品久久久久aaaa| 国产成人在线观看| 久久久噜噜噜久久人人看| 蜜臀国产一区二区三区在线播放| 欧美亚洲精品一区| 悠悠色在线精品| 色综合久久综合中文综合网| 国产精品毛片大码女人| 国产成人综合网| 国内成人精品2018免费看| 91精品欧美一区二区三区综合在 | 91在线视频免费91| 国产精品天天看| 国产v综合v亚洲欧| 国产日韩三级在线| 国产成人av电影在线播放| 久久久www成人免费毛片麻豆| 久久精品国产免费| 欧美成人r级一区二区三区| 蜜臀va亚洲va欧美va天堂 | 亚洲午夜久久久久久久久久久 | 亚洲天堂网中文字| 99re这里只有精品首页| 亚洲视频每日更新| 欧洲色大大久久| 香蕉成人啪国产精品视频综合网| 欧美性大战久久| 亚洲超碰97人人做人人爱| 7777精品伊人久久久大香线蕉完整版 | 国产成人av网站| 中文字幕av在线一区二区三区| 波多野结衣中文字幕一区 | 成人精品亚洲人成在线| 国产精品麻豆网站| 91久久线看在观草草青青| 亚洲第一在线综合网站| 日韩午夜在线观看视频| 国产资源精品在线观看| 国产精品乱码一区二三区小蝌蚪| 99精品视频一区二区三区| 亚洲乱码一区二区三区在线观看| 在线观看www91| 久久精品国产免费看久久精品| 国产人成亚洲第一网站在线播放| 波多野结衣的一区二区三区| 一区二区三区鲁丝不卡| 日韩欧美久久一区| caoporen国产精品视频| 一区二区欧美精品| 日韩精品影音先锋| 99久免费精品视频在线观看| 香蕉av福利精品导航| 久久久综合九色合综国产精品| 97久久超碰精品国产| 日韩激情av在线| 国产精品天美传媒| 欧美日韩国产天堂| 国产成人免费xxxxxxxx| 亚洲自拍偷拍欧美| 精品sm在线观看| 在线免费不卡视频| 国模套图日韩精品一区二区| 成人免费毛片aaaaa**| 亚洲国产日韩在线一区模特| 精品黑人一区二区三区久久| 成人av网在线| 久久国产人妖系列| 亚洲乱码中文字幕| 精品久久久久久无| 在线亚洲高清视频| 国产成人在线电影| 日本欧美大码aⅴ在线播放| 欧美激情资源网| 欧美一区二区三区视频在线观看| 成人avav影音| 日韩国产欧美视频| 亚洲色图制服丝袜| 久久久不卡影院| 欧美剧情片在线观看| www.亚洲国产| 人禽交欧美网站| 亚洲乱码一区二区三区在线观看| 精品日韩一区二区| 91成人免费网站| 粗大黑人巨茎大战欧美成人| 麻豆成人免费电影| 亚洲一区在线视频| 中文字幕av一区二区三区免费看| 欧美一激情一区二区三区| 91免费版在线| 国产一区二区调教| 奇米888四色在线精品| 一区二区三区在线视频播放| 欧美韩国日本综合| 欧美精品一区二区三区视频| 欧美日韩国产美| 色狠狠色噜噜噜综合网| 大白屁股一区二区视频| 狠狠色丁香九九婷婷综合五月| 亚洲1区2区3区视频| 亚洲精品国产品国语在线app| 国产亚洲欧洲997久久综合 | 日韩二区三区四区| 伊人性伊人情综合网| 中文天堂在线一区| 久久嫩草精品久久久久| 日韩视频一区二区三区在线播放| 欧美日韩一区 二区 三区 久久精品| av亚洲精华国产精华| 国产美女精品一区二区三区| 毛片av中文字幕一区二区| 天天综合色天天综合色h| 色综合久久天天| 成人黄页在线观看| 国产精品亚洲综合一区在线观看|