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

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

?? ogrmultipoint.cpp

?? mitab,讀取MapInfo的地圖文件
?? CPP
字號:
/******************************************************************************
 * $Id: ogrmultipoint.cpp 10646 2007-01-18 02:38:10Z warmerdam $
 *
 * Project:  OpenGIS Simple Features Reference Implementation
 * Purpose:  The OGRMultiPoint 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"
#include <assert.h>

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

/************************************************************************/
/*                           OGRMultiPoint()                            */
/************************************************************************/

OGRMultiPoint::OGRMultiPoint()
{
}

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

OGRwkbGeometryType OGRMultiPoint::getGeometryType() const

{
    if( getCoordinateDimension() == 3 )
        return wkbMultiPoint25D;
    else
        return wkbMultiPoint;
}

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

const char * OGRMultiPoint::getGeometryName() const

{
    return "MULTIPOINT";
}

/************************************************************************/
/*                        addGeometryDirectly()                         */
/*                                                                      */
/*      Add a new geometry to a collection.  Subclasses should          */
/*      override this to verify the type of the new geometry, and       */
/*      then call this method to actually add it.                       */
/************************************************************************/

OGRErr OGRMultiPoint::addGeometryDirectly( OGRGeometry * poNewGeom )

{
    if( poNewGeom->getGeometryType() != wkbPoint 
        && poNewGeom->getGeometryType() != wkbPoint25D )
        return OGRERR_UNSUPPORTED_GEOMETRY_TYPE;

    return OGRGeometryCollection::addGeometryDirectly( poNewGeom );
}

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

OGRGeometry *OGRMultiPoint::clone() const

{
    OGRMultiPoint       *poNewGC;

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

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

    return poNewGC;
}

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

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

{
    int         nMaxString = getNumGeometries() * 20 + 128;
    int         nRetLen = 0;

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

    *ppszDstText = (char *) VSIMalloc( nMaxString );
    if( *ppszDstText == NULL )
        return OGRERR_NOT_ENOUGH_MEMORY;

    sprintf( *ppszDstText, "%s (", getGeometryName() );

    for( int i = 0; i < getNumGeometries(); i++ )
    {
        OGRPoint        *poPoint = (OGRPoint *) getGeometryRef( i );

        if( i > 0 )
            strcat( *ppszDstText + nRetLen, "," );

        nRetLen += strlen(*ppszDstText + nRetLen);

        if( nMaxString < nRetLen + 100 )
        {
            nMaxString = nMaxString * 2;
            *ppszDstText = (char *) CPLRealloc(*ppszDstText,nMaxString);
        }
        
        OGRMakeWktCoordinate( *ppszDstText + nRetLen,
                              poPoint->getX(), 
                              poPoint->getY(),
                              poPoint->getZ(),
                              poPoint->getCoordinateDimension() );
    }

    strcat( *ppszDstText+nRetLen, ")" );

    return OGRERR_NONE;
}

/************************************************************************/
/*                           importFromWkt()                            */
/************************************************************************/

OGRErr OGRMultiPoint::importFromWkt( char ** ppszInput )

{

    char        szToken[OGR_WKT_TOKEN_MAX];
    const char  *pszInput = *ppszInput;
    int         iGeom;
    OGRErr      eErr = OGRERR_NONE;

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

/* -------------------------------------------------------------------- */
/*      Read and verify the type keyword, and ensure it matches the     */
/*      actual type of this container.                                  */
/* -------------------------------------------------------------------- */
    pszInput = OGRWktReadToken( pszInput, szToken );

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

/* -------------------------------------------------------------------- */
/*      Skip past first bracket for checking purposes, but don't        */
/*      alter pszInput.                                                 */
/* -------------------------------------------------------------------- */
    const char *pszPreScan = pszInput;

    // skip white space. 
    while( *pszPreScan == ' ' || *pszPreScan == '\t' )
        pszPreScan++;

    // Handle the proper EMPTY syntax.
    if( EQUALN(pszPreScan,"EMPTY",5) )
    {
        *ppszInput = (char *) pszPreScan+5;
        return OGRERR_NONE;
    }

    // Skip outer bracket.
    if( *pszPreScan != '(' )
        return OGRERR_CORRUPT_DATA;

    pszPreScan++;

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

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

/* -------------------------------------------------------------------- */
/*      Check for inner bracket indicating the improper bracketed       */
/*      format which we still want to support.                          */
/* -------------------------------------------------------------------- */
    // skip white space.
    while( *pszPreScan == ' ' || *pszPreScan == '\t' )
        pszPreScan++;

    // Do we have an inner bracket? 
    if( *pszPreScan == '(' )
        return importFromWkt_Bracketed( ppszInput );
    
/* -------------------------------------------------------------------- */
/*      Read the point list which should consist of exactly one point.  */
/* -------------------------------------------------------------------- */
    int                 nMaxPoint = 0;
    int                 nPointCount = 0;
    OGRRawPoint         *paoPoints = NULL;
    double              *padfZ = NULL;

    pszInput = OGRWktReadPoints( pszInput, &paoPoints, &padfZ, &nMaxPoint,
                                 &nPointCount );
    if( pszInput == NULL )
        return OGRERR_CORRUPT_DATA;

/* -------------------------------------------------------------------- */
/*      Transform raw points into point objects.                        */
/* -------------------------------------------------------------------- */
    for( iGeom = 0; iGeom < nPointCount && eErr == OGRERR_NONE; iGeom++ )
    {
        OGRGeometry     *poGeom;
        if( padfZ )
            poGeom = new OGRPoint( paoPoints[iGeom].x, 
                                   paoPoints[iGeom].y, 
                                   padfZ[iGeom] );
        else
            poGeom =  new OGRPoint( paoPoints[iGeom].x, 
                                    paoPoints[iGeom].y );

        eErr = addGeometryDirectly( poGeom );
    }

    OGRFree( paoPoints );
    if( padfZ )
        OGRFree( padfZ );

    if( eErr != OGRERR_NONE )
        return eErr;

    *ppszInput = (char *) pszInput;
    
    return OGRERR_NONE;
}


/************************************************************************/
/*                      importFromWkt_Bracketed()                       */
/*                                                                      */
/*      This operates similar to importFromWkt(), but reads a format    */
/*      with brackets around each point.  This is the form defined      */
/*      in the BNF of the SFSQL spec.  It is called from                */
/*      importFromWkt().                                                */
/************************************************************************/

OGRErr OGRMultiPoint::importFromWkt_Bracketed( char ** ppszInput )

{

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

/* -------------------------------------------------------------------- */
/*      Skip MULTIPOINT keyword.                                        */
/* -------------------------------------------------------------------- */
    pszInput = OGRWktReadToken( pszInput, szToken );

/* -------------------------------------------------------------------- */
/*      Read points till we get to the closing bracket.                 */
/* -------------------------------------------------------------------- */
    int                 nMaxPoint = 0;
    int                 nPointCount = 0;
    OGRRawPoint         *paoPoints = NULL;
    double              *padfZ = NULL;

    while( (pszInput = OGRWktReadToken( pszInput, szToken ))
           && (EQUAL(szToken,"(") || EQUAL(szToken,",")) )
    {
        OGRGeometry     *poGeom;

        pszInput = OGRWktReadPoints( pszInput, &paoPoints, &padfZ, &nMaxPoint,
                                     &nPointCount );

        if( pszInput == NULL || nPointCount != 1 )
            return OGRERR_CORRUPT_DATA;

        if( padfZ )
            poGeom = new OGRPoint( paoPoints[0].x, 
                                   paoPoints[0].y, 
                                   padfZ[0] );
        else
            poGeom =  new OGRPoint( paoPoints[0].x, 
                                    paoPoints[0].y );

        eErr = addGeometryDirectly( poGeom );
        if( eErr != OGRERR_NONE )
            return eErr;
    }

/* -------------------------------------------------------------------- */
/*      Cleanup.                                                        */
/* -------------------------------------------------------------------- */
    OGRFree( paoPoints );
    if( padfZ )
        OGRFree( padfZ );

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

    *ppszInput = (char *) pszInput;
    
    return OGRERR_NONE;
}


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩高清在线不卡| 久久久91精品国产一区二区三区| 精品中文字幕一区二区| 天涯成人国产亚洲精品一区av| 一区二区三区在线观看视频| 亚洲欧美一区二区视频| 亚洲视频精选在线| 依依成人综合视频| 丝袜a∨在线一区二区三区不卡| 肉丝袜脚交视频一区二区| 亚洲电影你懂得| 日本强好片久久久久久aaa| 老司机午夜精品99久久| 国产一区二区福利视频| 国产成a人亚洲精| 91在线精品一区二区三区| 色综合咪咪久久| 欧美日韩国产高清一区二区三区 | 免播放器亚洲一区| 蜜桃视频在线观看一区二区| 激情综合色播激情啊| 成人黄动漫网站免费app| 一本一道久久a久久精品综合蜜臀| 欧美三片在线视频观看 | 国产亚洲婷婷免费| 国产精品福利在线播放| 亚洲电影激情视频网站| 国内精品国产三级国产a久久| 从欧美一区二区三区| 在线精品视频免费播放| 日韩亚洲欧美成人一区| 国产欧美日韩在线观看| 亚洲综合色噜噜狠狠| 久久国产精品免费| 91丨porny丨中文| 日韩午夜精品视频| 亚洲欧美精品午睡沙发| 精品一区二区免费视频| 色综合视频一区二区三区高清| 日韩一区二区视频| 亚洲精品成a人| 国产一区二区三区免费观看| 欧美色国产精品| 中文欧美字幕免费| 日韩精品国产精品| 一本久道久久综合中文字幕| 欧美不卡视频一区| 性欧美大战久久久久久久久| av男人天堂一区| 久久久午夜精品理论片中文字幕| 亚洲网友自拍偷拍| 97精品国产97久久久久久久久久久久| 欧美另类z0zxhd电影| 欧美激情综合五月色丁香小说| 日韩国产成人精品| 精品视频免费看| 亚洲视频 欧洲视频| 国产a精品视频| 精品乱码亚洲一区二区不卡| 亚洲一区二区在线免费观看视频| 国产ts人妖一区二区| 日韩一区二区高清| 日韩成人精品在线| 欧美日韩国产成人在线91| 亚洲精选视频在线| av电影在线不卡| 国产精品久久三区| www.性欧美| 国产精品国产三级国产三级人妇| 国产曰批免费观看久久久| 日韩免费电影一区| 免费观看在线综合| 欧美一区二区久久久| 亚洲成人av在线电影| 91黄色免费版| 亚洲综合色在线| 欧美日韩另类一区| 天天色天天操综合| 欧美老肥妇做.爰bbww视频| 亚洲福利视频三区| 欧美久久久久久久久中文字幕| 亚洲成国产人片在线观看| 欧美日韩国产天堂| 男女视频一区二区| 久久亚洲精品国产精品紫薇| 国产一区啦啦啦在线观看| 国产亚洲欧美在线| 91视频国产资源| 五月激情六月综合| 久久先锋影音av鲁色资源| 国产成人av电影在线播放| 自拍偷拍欧美激情| 欧美午夜精品一区二区三区 | 精品国产凹凸成av人网站| 激情成人午夜视频| 国产精品系列在线| 欧洲人成人精品| 日韩av电影免费观看高清完整版| 欧美r级在线观看| 国产精品亚洲人在线观看| 国产精品久久免费看| 欧美日韩国产首页| 精品一区二区三区视频在线观看| 国产欧美一区二区在线观看| 色94色欧美sute亚洲线路二 | 日韩理论片中文av| 欧美疯狂性受xxxxx喷水图片| 久久疯狂做爰流白浆xx| 中文字幕不卡的av| 欧美精品第1页| 成人高清av在线| 日韩高清在线一区| 最新国产精品久久精品| 337p亚洲精品色噜噜噜| 懂色av一区二区三区蜜臀| 亚洲成人黄色影院| 国产精品污www在线观看| 欧美日韩国产高清一区二区三区 | 日韩中文欧美在线| 国产亚洲综合性久久久影院| 欧美性生交片4| 国产在线一区二区综合免费视频| 亚洲一区二区3| 欧美精彩视频一区二区三区| 91精品国产综合久久国产大片| 成人免费毛片app| 精品在线播放免费| 日韩二区三区在线观看| 亚洲男人的天堂av| 国产精品热久久久久夜色精品三区 | 日韩欧美你懂的| 欧美日韩综合一区| 97se亚洲国产综合自在线| 国产乱妇无码大片在线观看| 午夜欧美视频在线观看| 亚洲视频一区二区在线| 日本一二三不卡| 国产日韩欧美一区二区三区综合| 欧美一区二区不卡视频| 精品视频一区二区不卡| 在线观看免费视频综合| 一本色道久久综合亚洲精品按摩| 成人黄色电影在线| 波多野结衣中文字幕一区二区三区 | 日韩电影在线观看电影| 一区二区视频在线| 日韩理论在线观看| 日韩美女啊v在线免费观看| 一区在线播放视频| 国产精品久久久久影视| 中文字幕一区二区日韩精品绯色| 国产欧美视频一区二区三区| 日本一区二区三区在线不卡| 国产人成亚洲第一网站在线播放| 欧美精品一区男女天堂| 久久蜜桃av一区二区天堂| 国产女主播视频一区二区| 国产精品麻豆久久久| 亚洲视频一区二区在线观看| 亚洲欧美日韩在线播放| 亚洲综合精品久久| 日日夜夜精品视频免费| 捆绑调教一区二区三区| 国产成人免费视频网站| 不卡视频在线看| 欧洲国内综合视频| 91精品婷婷国产综合久久 | 91丨九色丨国产丨porny| 91污片在线观看| 欧美日韩国产经典色站一区二区三区| 欧美裸体bbwbbwbbw| 欧美一区二区三区小说| 精品处破学生在线二十三| 亚洲国产精品精华液2区45| 亚洲男帅同性gay1069| 日韩精品一级中文字幕精品视频免费观看| 日韩av二区在线播放| 国产99久久久国产精品免费看 | 成人黄色一级视频| 色婷婷精品大视频在线蜜桃视频| 3d动漫精品啪啪一区二区竹菊| 欧美电影免费观看高清完整版在| 日本一区二区三区久久久久久久久不| 亚洲精品网站在线观看| 美女视频网站久久| 91精品91久久久中77777| 91精品国产日韩91久久久久久| 国产日韩欧美一区二区三区综合| 亚洲一区在线电影| 国产电影一区二区三区| 欧美日韩视频在线一区二区| 国产欧美日韩视频在线观看| 亚洲一区av在线| www.亚洲色图.com| 欧美大片免费久久精品三p| 亚洲欧美成aⅴ人在线观看| 国产一区二区三区观看| 欧美视频你懂的| 国产精品护士白丝一区av| 久久爱www久久做|