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

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

?? ogr_srs_proj4.cpp

?? mitab,讀取MapInfo的地圖文件
?? CPP
?? 第 1 頁 / 共 5 頁
字號:
/******************************************************************************
 * $Id: ogr_srs_proj4.cpp 12537 2007-10-26 03:16:26Z warmerdam $
 *
 * Project:  OpenGIS Simple Features Reference Implementation
 * Purpose:  OGRSpatialReference interface to PROJ.4.
 * Author:   Frank Warmerdam <warmerdam@pobox.com>
 *
 ******************************************************************************
 * Copyright (c) 1999,  Les Technologies SoftMap Inc. 
 *
 * 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.
 ****************************************************************************/

#include "ogr_spatialref.h"
#include "ogr_p.h"
#include "cpl_conv.h"

extern int EPSGGetWGS84Transform( int nGeogCS, double *padfTransform );

CPL_CVSID("$Id: ogr_srs_proj4.cpp 12537 2007-10-26 03:16:26Z warmerdam $");

/* -------------------------------------------------------------------- */
/*      The following list comes from osrs/proj/src/pj_ellps.c          */
/*      ... please update from time to time.                            */
/* -------------------------------------------------------------------- */
static const char *ogr_pj_ellps[] = {
"MERIT",        "a=6378137.0", "rf=298.257", "MERIT 1983",
"SGS85",        "a=6378136.0", "rf=298.257",  "Soviet Geodetic System 85",
"GRS80",        "a=6378137.0", "rf=298.257222101", "GRS 1980(IUGG, 1980)",
"IAU76",        "a=6378140.0", "rf=298.257", "IAU 1976",
"airy",         "a=6377563.396", "b=6356256.910", "Airy 1830",
"APL4.9",       "a=6378137.0.",  "rf=298.25", "Appl. Physics. 1965",
"NWL9D",        "a=6378145.0.",  "rf=298.25", "Naval Weapons Lab., 1965",
"mod_airy",     "a=6377340.189", "b=6356034.446", "Modified Airy",
"andrae",       "a=6377104.43",  "rf=300.0",    "Andrae 1876 (Den., Iclnd.)",
"aust_SA",      "a=6378160.0", "rf=298.25", "Australian Natl & S. Amer. 1969",
"GRS67",        "a=6378160.0", "rf=298.2471674270", "GRS 67(IUGG 1967)",
"bessel",       "a=6377397.155", "rf=299.1528128", "Bessel 1841",
"bess_nam",     "a=6377483.865", "rf=299.1528128", "Bessel 1841 (Namibia)",
"clrk66",       "a=6378206.4", "b=6356583.8", "Clarke 1866",
"clrk80",       "a=6378249.145", "rf=293.4663", "Clarke 1880 mod.",
"CPM",          "a=6375738.7", "rf=334.29", "Comm. des Poids et Mesures 1799",
"delmbr",       "a=6376428.",  "rf=311.5", "Delambre 1810 (Belgium)",
"engelis",      "a=6378136.05", "rf=298.2566", "Engelis 1985",
"evrst30",  "a=6377276.345", "rf=300.8017",  "Everest 1830",
"evrst48",  "a=6377304.063", "rf=300.8017",  "Everest 1948",
"evrst56",  "a=6377301.243", "rf=300.8017",  "Everest 1956",
"evrst69",  "a=6377295.664", "rf=300.8017",  "Everest 1969",
"evrstSS",  "a=6377298.556", "rf=300.8017",  "Everest (Sabah & Sarawak)",
"fschr60",  "a=6378166.",   "rf=298.3", "Fischer (Mercury Datum) 1960",
"fschr60m", "a=6378155.",   "rf=298.3", "Modified Fischer 1960",
"fschr68",  "a=6378150.",   "rf=298.3", "Fischer 1968",
"helmert",  "a=6378200.",   "rf=298.3", "Helmert 1906",
"hough",        "a=6378270.0", "rf=297.", "Hough",
"intl",         "a=6378388.0", "rf=297.", "International 1909 (Hayford)",
"krass",        "a=6378245.0", "rf=298.3", "Krassovsky, 1942",
"kaula",        "a=6378163.",  "rf=298.24", "Kaula 1961",
"lerch",        "a=6378139.",  "rf=298.257", "Lerch 1979",
"mprts",        "a=6397300.",  "rf=191.", "Maupertius 1738",
"new_intl",     "a=6378157.5", "b=6356772.2", "New International 1967",
"plessis",      "a=6376523.",  "b=6355863.", "Plessis 1817 (France)",
"SEasia",       "a=6378155.0", "b=6356773.3205", "Southeast Asia",
"walbeck",      "a=6376896.0", "b=6355834.8467", "Walbeck",
"WGS60",    "a=6378165.0",  "rf=298.3", "WGS 60",
"WGS66",        "a=6378145.0", "rf=298.25", "WGS 66",
"WGS72",        "a=6378135.0", "rf=298.26", "WGS 72",
"WGS84",    "a=6378137.0",  "rf=298.257223563", "WGS 84",
"sphere",   "a=6370997.0",  "b=6370997.0", "Normal Sphere (r=6370997)",
0, 0, 0, 0,
};

/************************************************************************/
/*                          OSRProj4Tokenize()                          */
/*                                                                      */
/*      Custom tokenizing function for PROJ.4 strings.  The main        */
/*      reason we can't just use CSLTokenizeString is to handle         */
/*      strings with a + sign in the exponents of parameter values.     */
/************************************************************************/

char **OSRProj4Tokenize( const char *pszFull )

{
    char *pszStart = NULL;
    char *pszFullWrk;
    char **papszTokens = NULL;
    int  i;

    if( pszFull == NULL )
        return NULL;

    pszFullWrk = CPLStrdup( pszFull );

    for( i=0; pszFullWrk[i] != '\0'; i++ )
    {
        switch( pszFullWrk[i] )
        {
          case '+':
            if( i == 0 || pszFullWrk[i-1] == '\0' )
            {
                if( pszStart != NULL )
                {
                    if( strstr(pszStart,"=") != NULL )
                        papszTokens = CSLAddString( papszTokens, pszStart );
                    else
                    {
                        CPLString osAsBoolean = pszStart;
                        osAsBoolean += "=yes";
                        papszTokens = CSLAddString( papszTokens, osAsBoolean );
                    }
                }
                pszStart = pszFullWrk + i + 1;
            }
            break;

          case ' ':
          case '\t':
          case '\n':
            pszFullWrk[i] = '\0';
            break;

          default:
            break;
        }
    }

    if( pszStart != NULL && strlen(pszStart) > 0 )
        papszTokens = CSLAddString( papszTokens, pszStart );

    CPLFree( pszFullWrk );

    return papszTokens;
}


/************************************************************************/
/*                         OSRImportFromProj4()                         */
/************************************************************************/

OGRErr OSRImportFromProj4( OGRSpatialReferenceH hSRS, const char *pszProj4 )

{
    return ((OGRSpatialReference *) hSRS)->importFromProj4( pszProj4 );
}

/************************************************************************/
/*                              OSR_GDV()                               */
/*                                                                      */
/*      Fetch a particular parameter out of the parameter list, or      */
/*      the indicated default if it isn't available.  This is a         */
/*      helper function for importFromProj4().                          */
/************************************************************************/

static double OSR_GDV( char **papszNV, const char * pszField, 
                       double dfDefaultValue )

{
    const char * pszValue;

    pszValue = CSLFetchNameValue( papszNV, pszField );

    // special hack to use k_0 if available.
    if( pszValue == NULL && EQUAL(pszField,"k") )
        pszValue = CSLFetchNameValue( papszNV, "k_0" );

    if( pszValue == NULL )
        return dfDefaultValue;
    else
        return CPLDMSToDec(pszValue);
}

/************************************************************************/
/*                          importFromProj4()                           */
/************************************************************************/

/**
 * Import PROJ.4 coordinate string.
 *
 * The OGRSpatialReference is initialized from the passed PROJ.4 style
 * coordinate system string.  In addition to many +proj formulations which
 * have OGC equivelents, it is also possible to import "+init=epsg:n" style
 * definitions.  These are passed to importFromEPSG().  Other init strings
 * (such as the state plane zones) are not currently supported.   
 *
 * Example:
 *   pszProj4 = "+proj=utm +zone=11 +datum=WGS84" 
 *
 * This method is the equivelent of the C function OSRImportFromProj4().
 *
 * @param pszProj4 the PROJ.4 style string. 
 *
 * @return OGRERR_NONE on success or OGRERR_CORRUPT_DATA on failure.
 */

OGRErr OGRSpatialReference::importFromProj4( const char * pszProj4 )

{
    char **papszNV = NULL;
    char **papszTokens;
    int  i;
    char *pszCleanCopy;

/* -------------------------------------------------------------------- */
/*      Strip any newlines or other "funny" stuff that might occur      */
/*      if this string just came from reading a file.                   */
/* -------------------------------------------------------------------- */
    pszCleanCopy = CPLStrdup( pszProj4 );
    for( i = 0; pszCleanCopy[i] != '\0'; i++ )
    {
        if( pszCleanCopy[i] == 10 
            || pszCleanCopy[i] == 13 
            || pszCleanCopy[i] == 9 )
            pszCleanCopy[i] = ' ';
    }

/* -------------------------------------------------------------------- */
/*      Try to normalize the definition.  This should expand +init=     */
/*      clauses and so forth.                                           */
/* -------------------------------------------------------------------- */
    char *pszNormalized;

    pszNormalized = OCTProj4Normalize( pszCleanCopy );
    CPLFree( pszCleanCopy );
    
/* -------------------------------------------------------------------- */
/*      If we have an EPSG based init string, try to process it         */
/*      directly to get the fullest possible EPSG definition.           */
/* -------------------------------------------------------------------- */
    if( strstr(pszNormalized,"init=epsg:") != NULL )
    {
        OGRErr eErr;
        const char *pszNumber = strstr(pszNormalized,"init=epsg:") + 10;

        eErr = importFromEPSG( atoi(pszNumber) );
        if( eErr == OGRERR_NONE )
        {
            CPLFree( pszNormalized );
            return eErr;
        }
    }

/* -------------------------------------------------------------------- */
/*      Parse the PROJ.4 string into a cpl_string.h style name/value    */
/*      list.                                                           */
/* -------------------------------------------------------------------- */
    papszTokens = OSRProj4Tokenize( pszNormalized );
    CPLFree( pszNormalized );
    
    for( i = 0; papszTokens != NULL && papszTokens[i] != NULL; i++ )
    {
        char *pszEqual = strstr(papszTokens[i],"=");

        if( pszEqual == NULL )
            papszNV = CSLAddNameValue(papszNV, papszTokens[i], "" );
        else
        {
            pszEqual[0] = '\0';
            papszNV = CSLAddNameValue( papszNV, papszTokens[i], pszEqual+1 );
        }
    }

    CSLDestroy( papszTokens );

/* -------------------------------------------------------------------- */
/*      Extract the prime meridian, if there is one set.                */
/* -------------------------------------------------------------------- */
    const char *pszPM = CSLFetchNameValue( papszNV, "pm" );
    double dfFromGreenwich = 0.0;
    int    nPMCode = -1;

    if( pszPM != NULL )
    {
        if( EQUAL(pszPM,"lisbon") )
        {
            dfFromGreenwich = CPLDMSToDec( "9d07'54.862\"W" );
            nPMCode = 8902;
        }
        else if( EQUAL(pszPM,"paris") )
        {
            dfFromGreenwich = CPLDMSToDec( "2d20'14.025\"E" );
            nPMCode = 8903;
        }
        else if( EQUAL(pszPM,"bogota") )
        {
            dfFromGreenwich = CPLDMSToDec( "74d04'51.3\"W" );
            nPMCode = 8904;
        }
        else if( EQUAL(pszPM,"madrid") )
        {
            dfFromGreenwich = CPLDMSToDec( "3d41'16.48\"W" );
            nPMCode = 8905;
        }
        else if( EQUAL(pszPM,"rome") )
        {
            dfFromGreenwich = CPLDMSToDec( "12d27'8.4\"E" );
            nPMCode = 8906;
        }
        else if( EQUAL(pszPM,"bern") )
        {
            dfFromGreenwich = CPLDMSToDec( "7d26'22.5\"E" );
            nPMCode = 8907;
        }
        else if( EQUAL(pszPM,"jakarta") )
        {
            dfFromGreenwich = CPLDMSToDec( "106d48'27.79\"E" );
            nPMCode = 8908;
        }
        else if( EQUAL(pszPM,"ferro") )
        {
            dfFromGreenwich = CPLDMSToDec( "17d40'W" );
            nPMCode = 8909;
        }
        else if( EQUAL(pszPM,"brussels") )
        {
            dfFromGreenwich = CPLDMSToDec( "4d22'4.71\"E" );

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产在线精品免费av| 91麻豆精品国产91| 欧美一区二区视频网站| 中文字幕不卡的av| 美女精品一区二区| 欧美三级资源在线| 国产精品欧美久久久久无广告 | 亚洲一区欧美一区| 国产成人av一区二区三区在线 | 青青草国产成人av片免费 | 国产成人夜色高潮福利影视| 欧美日韩国产精品成人| 中文字幕一区二区视频| 国产精品主播直播| 精品国产青草久久久久福利| 日日摸夜夜添夜夜添国产精品| 成人h动漫精品一区二区| 欧美精品一区二区久久久| 亚洲成人动漫av| 在线观看网站黄不卡| 亚洲蜜桃精久久久久久久| av福利精品导航| 中文字幕不卡在线播放| 福利一区福利二区| 日本一区二区三区dvd视频在线| 精品一区二区免费| 26uuu久久天堂性欧美| 美女www一区二区| 欧美zozozo| 久久精品久久精品| 欧美成人a∨高清免费观看| 久久91精品国产91久久小草| 69久久夜色精品国产69蝌蚪网| 亚洲无人区一区| 欧美日本免费一区二区三区| 亚洲国产日韩综合久久精品| 欧美体内she精高潮| 亚洲成a人片在线不卡一二三区| 欧美三区在线观看| 奇米一区二区三区av| 精品成a人在线观看| 国产成人在线看| 亚洲视频一区二区在线| 欧美中文一区二区三区| 亚洲超碰精品一区二区| 日韩欧美国产午夜精品| 国产一区二区三区在线观看免费| 久久久三级国产网站| 91在线看国产| 视频在线在亚洲| 亚洲精品一线二线三线无人区| 国产资源精品在线观看| 亚洲欧洲一区二区三区| 欧美午夜不卡视频| 奇米一区二区三区av| 国产色婷婷亚洲99精品小说| 91免费版在线看| 日本欧洲一区二区| 国产日韩精品一区二区三区在线| 粉嫩久久99精品久久久久久夜| 综合欧美亚洲日本| 91精品国产91热久久久做人人| 国产永久精品大片wwwapp| 国产精品久久三区| 欧美日韩一区二区三区四区五区| 麻豆精品久久精品色综合| 国产精品免费久久| 91精品国产综合久久久蜜臀粉嫩| 国产精品一区一区三区| 亚洲图片一区二区| 国产欧美日韩亚州综合| 欧美日本视频在线| 99riav久久精品riav| 青娱乐精品在线视频| 136国产福利精品导航| 欧美另类一区二区三区| 成人福利视频网站| 久久疯狂做爰流白浆xx| 亚洲综合在线视频| 欧美国产精品中文字幕| 91麻豆精品国产91| 色综合av在线| 成人午夜视频免费看| 蜜桃视频在线一区| 亚洲一区二区在线观看视频| 久久久亚洲精品石原莉奈| 欧美三级蜜桃2在线观看| 成人黄色软件下载| 极品瑜伽女神91| 偷拍与自拍一区| 亚洲精品国产精品乱码不99| 26uuu精品一区二区| 91精品久久久久久久91蜜桃 | 亚洲日本在线天堂| 国产蜜臀97一区二区三区| 欧美成人a∨高清免费观看| 欧美四级电影网| 97久久超碰国产精品电影| 国产99一区视频免费 | 欧美一级xxx| 欧美亚洲一区二区在线| 色综合天天在线| 99久久精品免费| 高清日韩电视剧大全免费| 国产精品一品二品| 国产一区91精品张津瑜| 久久aⅴ国产欧美74aaa| 久久精品噜噜噜成人88aⅴ| 日本成人在线视频网站| 日本欧美大码aⅴ在线播放| 亚洲国产日韩a在线播放| 亚洲国产日韩av| 亚洲一卡二卡三卡四卡无卡久久 | 91蜜桃在线观看| 99国产精品国产精品毛片| 波多野洁衣一区| 成人国产一区二区三区精品| 成人福利电影精品一区二区在线观看| 国产精品66部| 99久精品国产| 色婷婷久久99综合精品jk白丝| av在线不卡网| 91成人国产精品| 欧美在线播放高清精品| 欧美精品视频www在线观看 | 欧洲精品一区二区| 欧美色男人天堂| 日韩精品一区二区三区三区免费| 日韩丝袜美女视频| 久久久久亚洲蜜桃| 亚洲国产精品精华液2区45| 国产精品不卡视频| 亚洲一区二区在线播放相泽| 秋霞国产午夜精品免费视频| 国产在线精品免费av| a美女胸又www黄视频久久| 色av综合在线| 日韩一区二区免费视频| 日本一区二区综合亚洲| 一二三区精品视频| 久久国产人妖系列| 成人精品gif动图一区| 在线观看一区日韩| 精品国产伦理网| 亚洲免费观看高清完整版在线观看 | 国产亲近乱来精品视频| 亚洲欧洲国产日本综合| 午夜伊人狠狠久久| 国产精品资源站在线| 一本久久精品一区二区| 制服丝袜在线91| 国产精品毛片久久久久久久| 亚洲成av人片一区二区三区| 九九九精品视频| 在线视频中文字幕一区二区| 日韩欧美一二区| 亚洲特黄一级片| 久久精工是国产品牌吗| 99国内精品久久| 日韩精品专区在线| 夜夜爽夜夜爽精品视频| 国产suv一区二区三区88区| 欧美女孩性生活视频| 欧美国产国产综合| 日本中文字幕一区二区视频| www.欧美亚洲| 久久婷婷一区二区三区| 亚洲成人先锋电影| 91在线无精精品入口| 久久亚洲精华国产精华液| 亚洲福利一区二区三区| 99亚偷拍自图区亚洲| 2014亚洲片线观看视频免费| 亚洲电影激情视频网站| 91精品国产高清一区二区三区| 国产精品久久99| 国产一区在线不卡| 欧美一区二区三区四区五区| 亚洲综合小说图片| 99re6这里只有精品视频在线观看| 欧美一区二区三区系列电影| 亚洲线精品一区二区三区八戒| 波多野结衣一区二区三区 | 成人高清在线视频| 久久色在线观看| 久久国内精品视频| 欧美成人精品福利| 精品一区二区三区在线视频| 欧美日韩三级在线| 亚洲一区在线观看免费 | 26uuu国产日韩综合| 日本不卡不码高清免费观看| 欧美亚洲日本国产| 亚洲午夜成aⅴ人片| 欧美性受xxxx黑人xyx| 一区二区成人在线观看| 欧美午夜片在线观看| 亚洲男女毛片无遮挡| 在线观看一区日韩| 午夜日韩在线观看|