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

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

?? ogrmultilinestring.cpp

?? mitab,讀取MapInfo的地圖文件
?? CPP
字號:
/******************************************************************************
 * $Id: ogrmultilinestring.cpp 10646 2007-01-18 02:38:10Z warmerdam $
 *
 * Project:  OpenGIS Simple Features Reference Implementation
 * Purpose:  The OGRMultiLineString class.
 * Author:   Frank Warmerdam, warmerdam@pobox.com
 *
 ******************************************************************************
 * Copyright (c) 1999, 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.
 ****************************************************************************/

#include "ogr_geometry.h"
#include "ogr_p.h"

CPL_CVSID("$Id: ogrmultilinestring.cpp 10646 2007-01-18 02:38:10Z warmerdam $");

/************************************************************************/
/*                        OGRMultiLineString()                          */
/************************************************************************/

OGRMultiLineString::OGRMultiLineString()
{
}

/************************************************************************/
/*                        ~OGRMultiLineString()                         */
/************************************************************************/

OGRMultiLineString::~OGRMultiLineString()
{
}

/************************************************************************/
/*                          getGeometryType()                           */
/************************************************************************/

OGRwkbGeometryType OGRMultiLineString::getGeometryType() const

{
    if( getCoordinateDimension() == 3 )
        return wkbMultiLineString25D;
    else
        return wkbMultiLineString;
}

/************************************************************************/
/*                          getGeometryName()                           */
/************************************************************************/

const char * OGRMultiLineString::getGeometryName() const

{
    return "MULTILINESTRING";
}

/************************************************************************/
/*                        addGeometryDirectly()                         */
/************************************************************************/

OGRErr OGRMultiLineString::addGeometryDirectly( OGRGeometry * poNewGeom )

{
    if( poNewGeom->getGeometryType() != wkbLineString 
        && poNewGeom->getGeometryType() != wkbLineString25D ) 
        return OGRERR_UNSUPPORTED_GEOMETRY_TYPE;

    return OGRGeometryCollection::addGeometryDirectly( poNewGeom );
}

/************************************************************************/
/*                               clone()                                */
/************************************************************************/

OGRGeometry *OGRMultiLineString::clone() const

{
    OGRMultiLineString  *poNewGC;

    poNewGC = new OGRMultiLineString;
    poNewGC->assignSpatialReference( getSpatialReference() );

    for( int i = 0; i < getNumGeometries(); i++ )
    {
        poNewGC->addGeometry( getGeometryRef(i) );
    }

    return poNewGC;
}

/************************************************************************/
/*                           importFromWkt()                            */
/*                                                                      */
/*      Instantiate from well known text format.  Currently this is     */
/*      `MULTILINESTRING ((x y, x y, ...),(x y, ...),...)'.             */
/************************************************************************/

OGRErr OGRMultiLineString::importFromWkt( char ** ppszInput )

{
    char        szToken[OGR_WKT_TOKEN_MAX];
    const char  *pszInput = *ppszInput;
    OGRErr      eErr;

/* -------------------------------------------------------------------- */
/*      Clear existing rings.                                           */
/* -------------------------------------------------------------------- */
    empty();

/* -------------------------------------------------------------------- */
/*      Read and verify the ``MULTILINESTRING'' keyword token.          */
/* -------------------------------------------------------------------- */
    pszInput = OGRWktReadToken( pszInput, szToken );

    if( !EQUAL(szToken,getGeometryName()) )
        return OGRERR_CORRUPT_DATA;

/* -------------------------------------------------------------------- */
/*      The next character should be a ( indicating the start of the    */
/*      list of linestrings.                                            */
/* -------------------------------------------------------------------- */
    pszInput = OGRWktReadToken( pszInput, szToken );

    if( EQUAL(szToken,"EMPTY") )
    {
        *ppszInput = (char *) pszInput;
        return OGRERR_NONE;
    }

    if( szToken[0] != '(' )
        return OGRERR_CORRUPT_DATA;

/* -------------------------------------------------------------------- */
/*      If the next token is EMPTY, then verify that we have proper     */
/*      EMPTY format will a trailing closing bracket.                   */
/* -------------------------------------------------------------------- */
    OGRWktReadToken( pszInput, szToken );
    if( EQUAL(szToken,"EMPTY") )
    {
        pszInput = OGRWktReadToken( pszInput, szToken );
        pszInput = OGRWktReadToken( pszInput, szToken );
        
        *ppszInput = (char *) pszInput;

        if( !EQUAL(szToken,")") )
            return OGRERR_CORRUPT_DATA;
        else
            return OGRERR_NONE;
    }

/* ==================================================================== */
/*      Read each line in turn.  Note that we try to reuse the same     */
/*      point list buffer from ring to ring to cut down on              */
/*      allocate/deallocate overhead.                                   */
/* ==================================================================== */
    OGRRawPoint *paoPoints = NULL;
    int         nMaxPoints = 0;
    double      *padfZ = NULL;
    
    do
    {
        int     nPoints = 0;

/* -------------------------------------------------------------------- */
/*      Read points for one line from input.                            */
/* -------------------------------------------------------------------- */
        pszInput = OGRWktReadPoints( pszInput, &paoPoints, &padfZ, &nMaxPoints,
                                     &nPoints );

        if( pszInput == NULL )
        {
            eErr = OGRERR_CORRUPT_DATA;
            break;
        }
        
/* -------------------------------------------------------------------- */
/*      Create the new line, and add to collection.                     */
/* -------------------------------------------------------------------- */
        OGRLineString   *poLine;

        poLine = new OGRLineString();
        poLine->setPoints( nPoints, paoPoints, padfZ );

        eErr = addGeometryDirectly( poLine ); 

/* -------------------------------------------------------------------- */
/*      Read the delimeter following the ring.                          */
/* -------------------------------------------------------------------- */
        
        pszInput = OGRWktReadToken( pszInput, szToken );
    } while( szToken[0] == ',' && eErr == OGRERR_NONE );

/* -------------------------------------------------------------------- */
/*      freak if we don't get a closing bracket.                        */
/* -------------------------------------------------------------------- */
    CPLFree( paoPoints );
    CPLFree( padfZ );
   
    if( eErr != OGRERR_NONE )
        return eErr;

    if( szToken[0] != ')' )
        return OGRERR_CORRUPT_DATA;
    
    *ppszInput = (char *) pszInput;
    return OGRERR_NONE;
}

/************************************************************************/
/*                            exportToWkt()                             */
/*                                                                      */
/*      Translate this structure into it's well known text format       */
/*      equivelent.  This could be made alot more CPU efficient!        */
/************************************************************************/

OGRErr OGRMultiLineString::exportToWkt( char ** ppszDstText ) const

{
    char        **papszLines;
    int         iLine, nCumulativeLength = 0;
    OGRErr      eErr;

    if( getNumGeometries() == 0 )
    {
        *ppszDstText = CPLStrdup("MULTILINESTRING EMPTY");
        return OGRERR_NONE;
    }

/* -------------------------------------------------------------------- */
/*      Build a list of strings containing the stuff for each ring.     */
/* -------------------------------------------------------------------- */
    papszLines = (char **) CPLCalloc(sizeof(char *),getNumGeometries());

    for( iLine = 0; iLine < getNumGeometries(); iLine++ )
    {
        eErr = getGeometryRef(iLine)->exportToWkt( &(papszLines[iLine]) );
        if( eErr != OGRERR_NONE )
            return eErr;

        CPLAssert( EQUALN(papszLines[iLine],"LINESTRING (", 12) );
        nCumulativeLength += strlen(papszLines[iLine] + 11);
    }
    
/* -------------------------------------------------------------------- */
/*      Allocate exactly the right amount of space for the              */
/*      aggregated string.                                              */
/* -------------------------------------------------------------------- */
    *ppszDstText = (char *) VSIMalloc(nCumulativeLength+getNumGeometries()+20);

    if( *ppszDstText == NULL )
        return OGRERR_NOT_ENOUGH_MEMORY;

/* -------------------------------------------------------------------- */
/*      Build up the string, freeing temporary strings as we go.        */
/* -------------------------------------------------------------------- */
    char *pszAppendPoint = *ppszDstText;

    strcpy( pszAppendPoint, "MULTILINESTRING (" );

    for( iLine = 0; iLine < getNumGeometries(); iLine++ )
    {                                                           
        if( iLine > 0 )
            strcat( pszAppendPoint, "," );
        
        strcat( pszAppendPoint, papszLines[iLine] + 11 );
        pszAppendPoint += strlen(pszAppendPoint);

        VSIFree( papszLines[iLine] );
    }

    strcat( pszAppendPoint, ")" );

    CPLFree( papszLines );

    return OGRERR_NONE;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美精品一区二区三区在线播放| 久久久精品免费观看| 91精品国产91热久久久做人人| 日韩欧美一级二级| 亚洲黄色小说网站| 国产九色精品成人porny | 日韩美女久久久| 欧美aaa在线| 91黄视频在线观看| 国产亚洲精品7777| 久久97超碰色| 欧美久久久久免费| 一区二区在线免费| www.激情成人| 欧美国产精品劲爆| 国产麻豆91精品| 日韩午夜电影av| 亚洲一区二区三区四区中文字幕| 国产高清不卡二三区| 久久久久国产一区二区三区四区| 日本韩国欧美在线| **网站欧美大片在线观看| 精彩视频一区二区三区| 色素色在线综合| 国产精品麻豆久久久| 国产成人午夜电影网| 久久久亚洲高清| 国产在线精品一区在线观看麻豆| 911精品国产一区二区在线| 亚洲福利国产精品| 在线观看视频一区| 一区二区三区在线视频免费| 91女厕偷拍女厕偷拍高清| 国产精品国产三级国产普通话三级 | 欧美色视频在线观看| 国产精品初高中害羞小美女文| 国产91露脸合集magnet| 欧美国产日韩在线观看| 成人免费福利片| 亚洲色图欧洲色图婷婷| 色婷婷精品久久二区二区蜜臀av| 亚洲精品欧美综合四区| 欧美午夜精品久久久| 五月激情综合婷婷| 欧美一级黄色录像| 韩国av一区二区三区在线观看| 久久综合999| www.日韩精品| 亚洲综合在线五月| 欧美一二区视频| 国产在线国偷精品免费看| 久久久国产综合精品女国产盗摄| 大白屁股一区二区视频| 一区二区三区四区乱视频| 欧美图片一区二区三区| 麻豆精品久久久| 国产精品麻豆欧美日韩ww| 在线视频国内一区二区| 全国精品久久少妇| 中文字幕av一区二区三区免费看 | 3atv在线一区二区三区| 加勒比av一区二区| 国产精品情趣视频| 欧美午夜精品久久久久久孕妇 | 色天天综合色天天久久| 日韩精品免费视频人成| 久久久精品综合| 欧美主播一区二区三区| 国产精品一级二级三级| 亚洲人成影院在线观看| 91精品国产综合久久久久久久久久| 狠狠色综合播放一区二区| 亚洲日本一区二区三区| 69堂成人精品免费视频| 成人久久18免费网站麻豆| 热久久一区二区| 亚洲三级小视频| 精品国产伦理网| 欧美无乱码久久久免费午夜一区 | 2024国产精品| 91国偷自产一区二区三区成为亚洲经典 | 国产精品一区二区男女羞羞无遮挡| 成人欧美一区二区三区小说| 日韩写真欧美这视频| 99视频有精品| 国产盗摄一区二区| 日韩在线a电影| 一区二区三区在线视频观看58| 久久久久久影视| 91精品国产日韩91久久久久久| 99久久综合精品| 国产伦精品一区二区三区视频青涩 | 亚洲精品高清在线观看| 久久久久久综合| 精品国产制服丝袜高跟| 欧美日韩国产成人在线免费| 99久久婷婷国产| 粉嫩高潮美女一区二区三区| 久久成人免费电影| 亚洲成av人影院在线观看网| 亚洲欧美在线视频观看| 国产精品亲子乱子伦xxxx裸| 精品入口麻豆88视频| 欧美日韩精品一区二区三区| 一本色道久久综合精品竹菊| 成人国产一区二区三区精品| 国产成人午夜电影网| 激情偷乱视频一区二区三区| 蜜臀99久久精品久久久久久软件| 天天操天天干天天综合网| 亚洲综合图片区| 洋洋av久久久久久久一区| 亚洲欧洲制服丝袜| 亚洲老妇xxxxxx| 一个色在线综合| 一区二区三区欧美在线观看| 亚洲精品一二三四区| 一区二区三区欧美激情| 亚洲欧美怡红院| 亚洲精品国产a久久久久久 | 美国一区二区三区在线播放| 五月天婷婷综合| 一区二区理论电影在线观看| 亚洲综合在线电影| 水野朝阳av一区二区三区| 丝袜国产日韩另类美女| 久久精品国产99久久6| 国产一区在线精品| 国产91精品在线观看| 91麻豆国产福利精品| 欧美日韩精品二区第二页| 欧美精品久久久久久久多人混战| 91麻豆精品国产91久久久久久| 日韩精品中文字幕在线不卡尤物| 26uuu色噜噜精品一区二区| 日本一区二区免费在线观看视频 | 91麻豆国产福利在线观看| 欧美午夜精品久久久久久孕妇 | 国产成人免费视频精品含羞草妖精| 国产伦精品一区二区三区在线观看 | 国产一区二区三区蝌蚪| 国产xxx精品视频大全| 一本一道波多野结衣一区二区| 欧美疯狂做受xxxx富婆| 久久精品视频网| 亚洲黄色尤物视频| 极品少妇一区二区三区精品视频| 成人小视频免费在线观看| 欧美曰成人黄网| 久久这里都是精品| 亚洲色图.com| 久热成人在线视频| 99久久精品国产导航| 日韩一区二区在线看片| 亚洲国产精品成人综合| 午夜精品福利一区二区三区蜜桃| 国产一区二区三区久久久| 91黄色激情网站| 国产欧美日产一区| 日本亚洲电影天堂| 91在线观看成人| 精品盗摄一区二区三区| 亚洲一区二区三区中文字幕| 国产综合色在线视频区| 欧日韩精品视频| 国产精品色婷婷| 美女视频黄频大全不卡视频在线播放| av成人免费在线观看| 精品久久一二三区| 午夜伦欧美伦电影理论片| 99久久精品国产网站| 久久精品一区八戒影视| 日本美女视频一区二区| 色噜噜狠狠成人中文综合 | 国产成人一级电影| 欧美一激情一区二区三区| 亚洲一区中文在线| www.欧美亚洲| 国产精品三级视频| 韩国精品免费视频| 欧美va亚洲va| 日本在线不卡视频一二三区| 日本乱码高清不卡字幕| 国产精品人人做人人爽人人添| 九色porny丨国产精品| 日韩三级在线观看| 亚洲制服欧美中文字幕中文字幕| 成人亚洲一区二区一| 精品乱人伦小说| 久久国产婷婷国产香蕉| 91精品黄色片免费大全| 一区二区国产视频| 91丨porny丨在线| 国产精品灌醉下药二区| 成人av在线影院| 中文字幕一区在线观看| 成人三级在线视频| 中文字幕一区二区三区四区不卡 | 亚洲丝袜另类动漫二区| 成人午夜视频免费看|