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

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

?? gml2ogrgeometry.cpp

?? mitab,讀取MapInfo的地圖文件
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
/******************************************************************************
 * $Id: gml2ogrgeometry.cpp 10646 2007-01-18 02:38:10Z warmerdam $
 *
 * Project:  GML Reader
 * Purpose:  Code to translate between GML and OGR geometry forms.
 * Author:   Frank Warmerdam, warmerdam@pobox.com
 *
 ******************************************************************************
 * Copyright (c) 2002, 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.
 *****************************************************************************
 *
 * Independent Security Audit 2003/04/17 Andrey Kiselev:
 *   Completed audit of this module. All functions may be used without buffer
 *   overflows and stack corruptions with any kind of input data.
 *
 * Security Audit 2003/03/28 warmerda:
 *   Completed security audit.  I believe that this module may be safely used 
 *   to parse, arbitrary GML potentially provided by a hostile source without
 *   compromising the system.
 *
 */

#include "cpl_minixml.h"
#include "ogr_geometry.h"
#include "ogr_api.h"
#include "cpl_error.h"
#include "cpl_string.h"
#include <ctype.h>

/************************************************************************/
/*                           BareGMLElement()                           */
/*                                                                      */
/*      Returns the passed string with any namespace prefix             */
/*      stripped off.                                                   */
/************************************************************************/

static const char *BareGMLElement( const char *pszInput )

{
    const char *pszReturn;

    pszReturn = strchr( pszInput, ':' );
    if( pszReturn == NULL )
        pszReturn = pszInput;
    else
        pszReturn++;

    return pszReturn;
}

/************************************************************************/
/*                          FindBareXMLChild()                          */
/*                                                                      */
/*      Find a child node with the indicated "bare" name, that is       */
/*      after any namespace qualifiers have been stripped off.          */
/************************************************************************/

static CPLXMLNode *FindBareXMLChild( CPLXMLNode *psParent, 
                                     const char *pszBareName )

{
    CPLXMLNode *psCandidate = psParent->psChild;

    while( psCandidate != NULL )
    {
        if( psCandidate->eType == CXT_Element
            && EQUAL(BareGMLElement(psCandidate->pszValue), pszBareName) )
            return psCandidate;

        psCandidate = psCandidate->psNext;
    }

    return NULL;
}

/************************************************************************/
/*                           GetElementText()                           */
/************************************************************************/

static const char *GetElementText( CPLXMLNode *psElement )

{
    if( psElement == NULL )
        return NULL;

    CPLXMLNode *psChild = psElement->psChild;

    while( psChild != NULL )
    {
        if( psChild->eType == CXT_Text )
            return psChild->pszValue;

        psChild = psChild->psNext;
    }
    
    return NULL;
}

/************************************************************************/
/*                              AddPoint()                              */
/*                                                                      */
/*      Add a point to the passed geometry.                             */
/************************************************************************/

static int AddPoint( OGRGeometry *poGeometry, 
                     double dfX, double dfY, double dfZ, int nDimension )

{
    if( poGeometry->getGeometryType() == wkbPoint 
        || poGeometry->getGeometryType() == wkbPoint25D )
    {
        OGRPoint *poPoint = (OGRPoint *) poGeometry;

        if( poPoint->getX() != 0.0 || poPoint->getY() != 0.0 )
        {
            CPLError( CE_Failure, CPLE_AppDefined, 
                      "More than one coordinate for <Point> element.");
            return FALSE;
        }
            
        poPoint->setX( dfX );
        poPoint->setY( dfY );
        if( nDimension == 3 )
            poPoint->setZ( dfZ );

        return TRUE;
    }
                
    else if( poGeometry->getGeometryType() == wkbLineString
             || poGeometry->getGeometryType() == wkbLineString25D )
    {
        if( nDimension == 3 )
            ((OGRLineString *) poGeometry)->addPoint( dfX, dfY, dfZ );
        else
            ((OGRLineString *) poGeometry)->addPoint( dfX, dfY );

        return TRUE;
    }

    else
    {
        CPLAssert( FALSE );
        return FALSE;                                                   
    }
}

/************************************************************************/
/*                        ParseGMLCoordinates()                         */
/************************************************************************/

int ParseGMLCoordinates( CPLXMLNode *psGeomNode, OGRGeometry *poGeometry )

{
    CPLXMLNode *psCoordinates = FindBareXMLChild( psGeomNode, "coordinates" );
    int iCoord = 0;

/* -------------------------------------------------------------------- */
/*      Handle <coordinates> case.                                      */
/* -------------------------------------------------------------------- */
    if( psCoordinates != NULL )
    {
        const char *pszCoordString = GetElementText( psCoordinates );

        if( pszCoordString == NULL )
        {
            CPLError( CE_Failure, CPLE_AppDefined, 
                      "<coordinates> element missing value." );
            return FALSE;
        }

        while( *pszCoordString != '\0' )
        {
            double dfX, dfY, dfZ = 0.0;
            int nDimension = 2;

            // parse out 2 or 3 tuple. 
            dfX = atof( pszCoordString );
            while( *pszCoordString != '\0'
                   && *pszCoordString != ','
                   && !isspace(*pszCoordString) )
                pszCoordString++;

            if( *pszCoordString == '\0' || isspace(*pszCoordString) )
            {
                CPLError( CE_Failure, CPLE_AppDefined, 
                          "Corrupt <coordinates> value." );
                return FALSE;
            }

            pszCoordString++;
            dfY = atof( pszCoordString );
            while( *pszCoordString != '\0' 
                   && *pszCoordString != ','
                   && !isspace(*pszCoordString) )
                pszCoordString++;

            if( *pszCoordString == ',' )
            {
                pszCoordString++;
                dfZ = atof( pszCoordString );
                nDimension = 3;
                while( *pszCoordString != '\0' 
                       && *pszCoordString != ','
                       && !isspace(*pszCoordString) )
                pszCoordString++;
            }

            while( isspace(*pszCoordString) )
                pszCoordString++;

            if( !AddPoint( poGeometry, dfX, dfY, dfZ, nDimension ) )
                return FALSE;

            iCoord++;
        }

        return iCoord > 0;
    }

/* -------------------------------------------------------------------- */
/*      Is this a "pos"?  I think this is a GML 3 construct.            */
/* -------------------------------------------------------------------- */
    CPLXMLNode *psPos = FindBareXMLChild( psGeomNode, "pos" );
    
    if( psPos != NULL )
    {
        char **papszTokens = CSLTokenizeStringComplex( 
            GetElementText( psPos ), " ,", FALSE, FALSE );
        int bSuccess = FALSE;

        if( CSLCount( papszTokens ) > 2 )
        {
            bSuccess = AddPoint( poGeometry, 
                                 atof(papszTokens[0]), 
                                 atof(papszTokens[1]),
                                 atof(papszTokens[2]), 3 );
        }
        else if( CSLCount( papszTokens ) > 1 )
        {
            bSuccess = AddPoint( poGeometry, 
                                 atof(papszTokens[0]), 
                                 atof(papszTokens[1]),
                                 0.0, 2 );
        }
        else
        {
            CPLError( CE_Failure, CPLE_AppDefined,
                      "Did not get 2+ values in <gml:pos>%s</gml:pos> tuple.",
                      GetElementText( psPos ) );
        }

        CSLDestroy( papszTokens );

        return bSuccess;
    }
    

/* -------------------------------------------------------------------- */
/*      Handle form with a list of <coord> items each with an <X>,      */
/*      and <Y> element.                                                */
/* -------------------------------------------------------------------- */
    CPLXMLNode *psCoordNode;

    for( psCoordNode = psGeomNode->psChild; 
         psCoordNode != NULL;
         psCoordNode = psCoordNode->psNext )
    {
        if( psCoordNode->eType != CXT_Element 
            || !EQUAL(BareGMLElement(psCoordNode->pszValue),"coord") )
            continue;

        CPLXMLNode *psXNode, *psYNode, *psZNode;
        double dfX, dfY, dfZ = 0.0;
        int nDimension = 2;

        psXNode = FindBareXMLChild( psCoordNode, "X" );
        psYNode = FindBareXMLChild( psCoordNode, "Y" );
        psZNode = FindBareXMLChild( psCoordNode, "Z" );

        if( psXNode == NULL || psYNode == NULL 
            || GetElementText(psXNode) == NULL
            || GetElementText(psYNode) == NULL
            || (psZNode != NULL && GetElementText(psZNode) == NULL) )
        {
            CPLError( CE_Failure, CPLE_AppDefined, 
                      "Corrupt <coord> element, missing <X> or <Y> element?" );
            return FALSE;
        }

        dfX = atof( GetElementText(psXNode) );
        dfY = atof( GetElementText(psYNode) );

        if( psZNode != NULL && GetElementText(psZNode) != NULL )
        {
            dfZ = atof( GetElementText(psZNode) );
            nDimension = 3;
        }

        if( !AddPoint( poGeometry, dfX, dfY, dfZ, nDimension ) )
            return FALSE;

        iCoord++;
    }

    return iCoord > 0.0;
}

/************************************************************************/
/*                      GML2OGRGeometry_XMLNode()                       */
/*                                                                      */
/*      Translates the passed XMLnode and it's children into an         */
/*      OGRGeometry.  This is used recursively for geometry             */
/*      collections.                                                    */
/************************************************************************/

static OGRGeometry *GML2OGRGeometry_XMLNode( CPLXMLNode *psNode )

{
    const char *pszBaseGeometry = BareGMLElement( psNode->pszValue );

/* -------------------------------------------------------------------- */
/*      Polygon                                                         */
/* -------------------------------------------------------------------- */
    if( EQUAL(pszBaseGeometry,"Polygon") )
    {
        CPLXMLNode *psChild;
        OGRPolygon *poPolygon = new OGRPolygon();
        OGRLinearRing *poRing;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人精品国产免费网站| 亚洲国产一区视频| 欧美视频一区在线| 国产精品99久久久久久久vr| 亚洲一区二区三区视频在线| 国产情人综合久久777777| 精品婷婷伊人一区三区三| av一区二区不卡| 毛片av一区二区| 亚洲午夜激情网页| 国产精品大尺度| 久久综合九色欧美综合狠狠| 欧美另类久久久品| 色网站国产精品| 国产99久久久国产精品免费看| 午夜欧美在线一二页| 亚洲色图在线看| 国产精品麻豆久久久| 精品少妇一区二区三区在线播放| 欧美性欧美巨大黑白大战| 99国产精品国产精品毛片| 国产精品66部| 国产一区二区三区四区五区美女| 视频一区欧美精品| 亚洲午夜久久久久久久久电影网| 中文字幕亚洲不卡| 国产精品美女久久久久久久久久久| 欧美va亚洲va在线观看蝴蝶网| 在线播放国产精品二区一二区四区 | 久久久久一区二区三区四区| 制服丝袜亚洲网站| 欧美日本韩国一区| 欧美精品自拍偷拍| 欧美久久久久久蜜桃| 在线影院国内精品| 色婷婷国产精品| 色琪琪一区二区三区亚洲区| 99免费精品在线| 97成人超碰视| 91免费国产在线观看| 91蜜桃视频在线| 在线观看国产一区二区| 欧美综合一区二区三区| 91亚洲男人天堂| 色久综合一二码| 欧美在线播放高清精品| 欧美日韩情趣电影| 3d动漫精品啪啪一区二区竹菊| 欧美一区二区三区在线电影| 日韩一区国产二区欧美三区| 日韩精品一区二区三区swag| 精品国内二区三区| 中文字幕 久热精品 视频在线| 国产精品福利一区| 亚洲一区精品在线| 日本午夜一本久久久综合| 韩国av一区二区三区四区| 国产精品资源站在线| 91最新地址在线播放| 欧美私模裸体表演在线观看| 日韩欧美亚洲国产精品字幕久久久| 精品嫩草影院久久| 亚洲欧洲精品一区二区三区 | 夜夜揉揉日日人人青青一国产精品 | 欧美在线观看一二区| 7777精品久久久大香线蕉| 欧美不卡一区二区| 国产精品每日更新| 亚洲v日本v欧美v久久精品| 日本 国产 欧美色综合| 国产成人精品免费一区二区| 一本大道久久精品懂色aⅴ| 91精品国产色综合久久| 国产午夜精品理论片a级大结局| 国产精品久久久久影院色老大 | 亚洲激情图片qvod| 亚洲成人777| 国产成人福利片| 欧美日韩精品欧美日韩精品| 精品久久人人做人人爰| 自拍偷拍亚洲激情| 青青草视频一区| www.亚洲色图| 欧美mv日韩mv| 亚洲国产精品视频| 国产sm精品调教视频网站| 精品视频123区在线观看| 久久久www成人免费毛片麻豆| 亚洲一区视频在线| 国产成人欧美日韩在线电影| 欧美日韩一区二区三区在线看| 久久精品一区二区三区不卡牛牛| 一区二区三国产精华液| 国产精品一区二区三区网站| 欧美三级一区二区| 国产女主播视频一区二区| 日韩精品电影在线| 色综合久久88色综合天天免费| 日韩精品一区二区三区在线 | 色呦呦一区二区三区| 日韩午夜av电影| 一区二区三区四区蜜桃| 国产福利一区在线观看| 91麻豆精品国产自产在线| 亚洲视频一区在线观看| 国产成人亚洲综合a∨婷婷图片| 91精品欧美久久久久久动漫| 成人欧美一区二区三区白人 | 99视频在线观看一区三区| 欧美成人精品福利| 亚洲线精品一区二区三区八戒| 大胆亚洲人体视频| 精品国产免费视频| 麻豆精品视频在线观看视频| 欧美性做爰猛烈叫床潮| 国产精品天天看| 国产一区二区在线观看免费| 777亚洲妇女| 天天亚洲美女在线视频| 精品国产sm最大网站免费看| 亚洲天堂中文字幕| 国产一区二区三区综合| 欧美另类变人与禽xxxxx| 亚洲黄色尤物视频| 91视频com| 综合av第一页| 成人午夜免费视频| 欧美国产激情二区三区| 国产一区二区三区美女| 欧美成人一级视频| 久久黄色级2电影| 91精品国产综合久久蜜臀| 亚洲成人高清在线| 欧美偷拍一区二区| 亚洲一级电影视频| 欧美日韩精品一区二区三区| 亚洲黄色小视频| 欧美日韩一区视频| 亚洲男人天堂一区| 在线免费视频一区二区| 亚洲国产美女搞黄色| 欧美日本视频在线| 麻豆视频一区二区| 26uuu国产一区二区三区| 黑人巨大精品欧美一区| 欧美刺激脚交jootjob| 久久精品99国产精品| 青青草国产成人99久久| 91精品国产美女浴室洗澡无遮挡| 日韩在线一区二区三区| 日韩无一区二区| 国产乱子轮精品视频| 国产精品蜜臀av| 在线免费视频一区二区| 天堂久久一区二区三区| 精品粉嫩aⅴ一区二区三区四区| 狠狠色丁香久久婷婷综合_中| 中国av一区二区三区| 91免费视频观看| 日本中文在线一区| 久久综合九色综合欧美亚洲| 国产91丝袜在线18| 亚洲精品国产高清久久伦理二区| 欧美色图天堂网| 韩日av一区二区| 亚洲三级电影全部在线观看高清| 欧美艳星brazzers| 精品一区二区久久久| 国产精品人成在线观看免费 | 亚洲最大的成人av| 4438成人网| 成人免费视频国产在线观看| 亚洲一区二区精品视频| 欧美一级夜夜爽| 高清shemale亚洲人妖| 亚洲一区在线免费观看| 精品粉嫩超白一线天av| 91视视频在线观看入口直接观看www| 午夜久久久影院| 中文字幕欧美日本乱码一线二线| 欧美主播一区二区三区| 狠狠狠色丁香婷婷综合久久五月| 亚洲欧美日韩中文播放| 欧美成人一区二区三区片免费 | 日本不卡123| 国产精品第13页| 日韩三级精品电影久久久| 成人app网站| 另类人妖一区二区av| 亚洲男人天堂一区| 精品99久久久久久| 欧美优质美女网站| 丰满放荡岳乱妇91ww| 日韩经典一区二区| 亚洲色欲色欲www| 久久久亚洲高清| 制服.丝袜.亚洲.中文.综合| 91香蕉视频黄| 国产精品99精品久久免费| 日本伊人色综合网|