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

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

?? shape2ogr.cpp

?? 支持各種柵格圖像和矢量圖像讀取的庫
?? CPP
?? 第 1 頁 / 共 4 頁
字號:
/****************************************************************************** * $Id: shape2ogr.cpp 10646 2007-01-18 02:38:10Z warmerdam $ * * Project:  OpenGIS Simple Features Reference Implementation * Purpose:  Implements translation of Shapefile shapes into OGR *           representation. * Author:   Frank Warmerdam, warmerda@home.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 "ogrshape.h"#include "cpl_conv.h"CPL_CVSID("$Id: shape2ogr.cpp 10646 2007-01-18 02:38:10Z warmerdam $");static const double EPSILON = 1E-5;/************************************************************************//*                            epsilonEqual()                            *//************************************************************************/static inline bool epsilonEqual(double a, double b, double eps) {    return (::fabs(a - b) < eps);}/* A helper class which represents 2D bounding box */class RingExtent{public:    RingExtent();    /* Calculates bounding box for given set of points */    void calculate( int ringParts, double *ringX, double *ringY );    /* Does this extent contains rhs*/    bool contains( const RingExtent &rhs );    /* Does this extent contains given point*/    bool contains( double x, double y );private:    bool empty; /* extent is empty */    double xMin, yMin; /* lower left vertex of the bounding box */    double xMax, yMax; /* upper right vertex of the bounding box */};RingExtent::RingExtent():    empty( true ),    xMin( 0 ), //nan ?    yMin( 0 ),     xMax( 0 ),     yMax( 0 ){}void RingExtent::calculate( int ringParts, double *ringX, double *ringY ){    empty = ringParts <= 0;    if ( !empty )    {        xMin = xMax = *ringX;        yMin = yMax = *ringY;        while( --ringParts > 0 )        {            if ( xMin > *ringX )                xMin = *ringX;            else if ( xMax < *ringX )                xMax = *ringX;            if ( yMin > *ringY )               yMin = *ringY;            else if ( yMax < *ringY )                yMax = *ringY;            ++ringX;             ++ringY;         }    }}inline bool RingExtent::contains( double x, double y ){    if ( empty )        return false;    return xMin <= x && x <= xMax &&        yMin <= y && y <= yMax;}inline bool RingExtent::contains( const RingExtent &extent ){    return contains( extent.xMin, extent.yMin ) &&        contains( extent.xMax, extent.yMax );}/************************************************************************//*                        RingStartEnd                                  *//*        set first and last vertex for given ring                      *//************************************************************************/void RingStartEnd ( SHPObject *psShape, int ring, int *start, int *end ){    if( psShape->panPartStart == NULL )    {	    *start = 0;        *end = psShape->nVertices - 1;    }    else    {        if( ring == psShape->nParts - 1 )            *end = psShape->nVertices - 1;        else            *end = psShape->panPartStart[ring+1] - 1;        *start = psShape->panPartStart[ring];    }}    /************************************************************************//*                          RingDirection()                             *//*                                                                      *//*      return: 1 CW (clockwise)                                        *//*             -1 CCW (counterclockwise)                                *//*              0 error                                                 *//************************************************************************/int RingDirection ( SHPObject *Shape, int ring ) {    int    i, start, end, v, next;    double *x, *y, dx0, dy0, dx1, dy1, area2;     /* Note: first and last coordinate MUST be identical according to shapefile specification */    if ( ring < 0 || ring >= Shape->nParts ) return ( 0 );    x = Shape->padfX;    y = Shape->padfY;    RingStartEnd ( Shape, ring, &start, &end );    if ( start == end ) return ( 0 ); // empty ring!?!?    /* Find the lowest rightmost vertex */    v = start;      for ( i = start + 1; i < end; i++ )    {        /* => v < end */        if ( y[i] < y[v] || ( y[i] == y[v] && x[i] > x[v] ) )        {            v = i;        }    }        /* Vertices may be duplicate, we have to go to nearest different in each direction */    /* preceding */    next = v - 1;    while ( 1 )    {        if ( next < start )         {            next = end - 1;         }        if( !epsilonEqual(x[next], x[v], EPSILON)             || !epsilonEqual(y[next], y[v], EPSILON) )        {            break;        }        if ( next == v ) /* So we cannot get into endless loop */        {            break;        }        next--;    }	        dx0 = x[next] - x[v];    dy0 = y[next] - y[v];            /* following */    next = v + 1;    while ( 1 )    {        if ( next >= end )         {            next = start;         }        if ( !epsilonEqual(x[next], x[v], EPSILON)              || !epsilonEqual(y[next], y[v], EPSILON) )        {            break;        }        if ( next == v ) /* So we cannot get into endless loop */        {            break;        }        next++;    }    dx1 = x[next] - x[v];    dy1 = y[next] - y[v];    area2 = dx1 * dy0 - dx0 * dy1;        if ( area2 > 0 )      /* CCW */	return -1;    else if ( area2 < 0 )  /* CW */	return 1;        return 0; /* error */}/************************************************************************//*                          PointInRing()                               *//*                                                                      *//*      return: 1 point is inside the ring                              *//*              0 point is outside the ring                             *//*                                                                      *//*              for point exactly on the boundary it returns 0 or 1     *//************************************************************************/int PointInRing ( SHPObject *Shape, int ring, double x, double y ) {    int    i, start, end, c = 0;    double *xp, *yp;     if ( ring < 0 || ring >= Shape->nParts ) return ( 0 );    xp = Shape->padfX;    yp = Shape->padfY;    RingStartEnd ( Shape, ring, &start, &end );    /* This code was originaly written by Randolph Franklin, here it is slightly modified. */    for (i = start; i < end; i++) {        if ( ( ( ( yp[i] <= y ) && ( y < yp[i+1] ) ) ||                ( ( yp[i+1] <= y ) && ( y < yp[i] ) ) ) &&             ( x < (xp[i+1] - xp[i]) * (y - yp[i]) / (yp[i+1] - yp[i]) + xp[i] )	     ) 	{            c = !c;	}    }    return c;}/************************************************************************//*                          RingInRing()                                *//*                                                                      *//* Checks point by point using PointInRing if oRing contains iRing      *//*                                                                      *//*      return: 1 oRing contains iRing                                  *//*              0 iRing is not contained by oRing                       *//*                                                                      *//*              for point exactly on the boundary it returns 0 or 1     *//************************************************************************/int RingInRing( SHPObject *Shape, int oRing, int iRing ){    int iRingStart, iRingEnd;    RingStartEnd ( Shape, iRing, &iRingStart, &iRingEnd );    while( iRingStart < iRingEnd )    {        if ( !PointInRing( Shape, oRing, Shape->padfX[iRingStart], Shape->padfY[iRingStart] ) )            return 0;        ++iRingStart;    }    return 1;}    /************************************************************************//*                        CreateLinearRing                              *//*                                                                      *//************************************************************************/OGRLinearRing * CreateLinearRing ( SHPObject *psShape, int ring ){    OGRLinearRing *poRing;    int nRingStart, nRingEnd, nRingPoints;    poRing = new OGRLinearRing();    RingStartEnd ( psShape, ring, &nRingStart, &nRingEnd );    nRingPoints = nRingEnd - nRingStart + 1;    poRing->setPoints( nRingPoints, psShape->padfX + nRingStart, 	       psShape->padfY + nRingStart, psShape->padfZ + nRingStart );    return ( poRing );}    /************************************************************************//*                          SHPReadOGRObject()                          *//*                                                                      *//*      Read an item in a shapefile, and translate to OGR geometry      *//*      representation.                                                 *//************************************************************************/OGRGeometry *SHPReadOGRObject( SHPHandle hSHP, int iShape ){    // CPLDebug( "Shape", "SHPReadOGRObject( iShape=%d )\n", iShape );    SHPObject   *psShape;    OGRGeometry *poOGR = NULL;    psShape = SHPReadObject( hSHP, iShape );    if( psShape == NULL )    {        return NULL;    }/* -------------------------------------------------------------------- *//*      Point.                                                          *//* -------------------------------------------------------------------- */    else if( psShape->nSHPType == SHPT_POINT             || psShape->nSHPType == SHPT_POINTM             || psShape->nSHPType == SHPT_POINTZ )    {        poOGR = new OGRPoint( psShape->padfX[0], psShape->padfY[0],                              psShape->padfZ[0] );

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
麻豆国产精品777777在线| 国产乱子伦视频一区二区三区| 精品国产123| 99国产精品国产精品毛片| 日本人妖一区二区| 日韩毛片高清在线播放| 精品国产一区二区精华| 在线观看日韩毛片| 从欧美一区二区三区| 天天av天天翘天天综合网 | 中文字幕中文字幕在线一区| 欧美精品三级在线观看| 91亚洲大成网污www| 国产乱淫av一区二区三区| 日韩中文欧美在线| 亚洲女厕所小便bbb| 国产亚洲精品aa| 欧美一级二级在线观看| 在线观看日韩国产| 99久久综合狠狠综合久久| 国产一区在线观看麻豆| 蜜臀91精品一区二区三区| 有码一区二区三区| 最好看的中文字幕久久| 中文一区二区在线观看| 337p日本欧洲亚洲大胆精品| 日韩一区二区中文字幕| 777a∨成人精品桃花网| 欧美性生交片4| 色狠狠色狠狠综合| 99久久精品99国产精品| 不卡电影一区二区三区| 国产91精品精华液一区二区三区| 激情小说欧美图片| 久久99久久久欧美国产| 奇米一区二区三区av| 婷婷久久综合九色国产成人| 亚洲国产成人精品视频| 亚洲国产一区在线观看| 亚洲一区日韩精品中文字幕| 一区二区三区在线观看网站| 一区二区三区中文字幕在线观看| 亚洲欧美一区二区三区国产精品 | 日韩一级大片在线| 91麻豆精品国产91久久久久久| 欧美麻豆精品久久久久久| 欧美日韩高清不卡| 日韩亚洲国产中文字幕欧美| 日韩欧美不卡在线观看视频| 精品久久国产97色综合| 亚洲精品在线免费观看视频| 亚洲精品一线二线三线无人区| 精品国产免费人成电影在线观看四季| 日韩欧美在线网站| 久久婷婷色综合| 国产精品视频一区二区三区不卡| 国产精品毛片久久久久久| 一区二区三区在线视频播放 | 久久国产尿小便嘘嘘尿| 国产在线精品一区二区三区不卡 | 日韩美女啊v在线免费观看| 亚洲精品五月天| 香蕉久久一区二区不卡无毒影院| 蜜乳av一区二区| 国产一区二区三区四区五区入口| 成人一区二区视频| 972aa.com艺术欧美| 制服.丝袜.亚洲.中文.综合| 精品国产麻豆免费人成网站| 中文字幕视频一区二区三区久| 亚洲欧美日韩系列| 肉肉av福利一精品导航| 国产麻豆视频精品| 91免费视频网址| 日韩一区二区在线观看| 国产精品久久久久影院老司| 亚洲一区二区三区在线播放| 精品在线你懂的| aaa亚洲精品一二三区| 欧美日韩二区三区| 国产丝袜在线精品| 午夜精品久久久久| 国产精品一二三| 欧美视频在线观看一区| 精品国产凹凸成av人导航| 亚洲视频在线观看三级| 青青草国产精品97视觉盛宴| 成人h版在线观看| 欧美乱妇一区二区三区不卡视频| 亚洲国产激情av| 免费成人在线影院| 91蜜桃免费观看视频| 日韩免费在线观看| 亚洲精品中文在线观看| 国产一区二区三区不卡在线观看| 91福利国产精品| 欧美高清在线视频| 美女诱惑一区二区| 日本丶国产丶欧美色综合| 26uuu另类欧美| 亚洲大片在线观看| 99精品1区2区| 久久久久久麻豆| 同产精品九九九| 91亚洲大成网污www| 欧美国产欧美综合| 麻豆91在线看| 7777精品伊人久久久大香线蕉的 | 综合av第一页| 国产大陆a不卡| 日韩精品最新网址| 亚洲一区二区视频| aa级大片欧美| 国产目拍亚洲精品99久久精品| 日本亚洲一区二区| 欧美人与z0zoxxxx视频| 亚洲美女偷拍久久| 不卡av电影在线播放| 国产三级久久久| 国模套图日韩精品一区二区| 91精品视频网| 亚洲成人免费视| 欧美怡红院视频| 一区二区三区.www| 91视频国产观看| 最新不卡av在线| 99久久精品免费看国产免费软件| 欧美国产综合色视频| 国产成人午夜电影网| 久久久久久久久久美女| 国内一区二区视频| 337p日本欧洲亚洲大胆色噜噜| 蜜臀久久久久久久| 欧美一区二区三区人| 日韩精品亚洲一区| 4438x亚洲最大成人网| 五月天丁香久久| 欧美女孩性生活视频| 香蕉乱码成人久久天堂爱免费| 欧美日韩国产首页在线观看| 午夜精品久久久久影视| 欧美日韩精品免费| 无码av免费一区二区三区试看| 欧美高清视频不卡网| 日韩一区精品字幕| 精品久久久久99| 国产福利一区在线| 国产精品欧美一级免费| 91色乱码一区二区三区| 亚洲二区视频在线| 日韩写真欧美这视频| 国产一区二区主播在线| 中文字幕欧美日本乱码一线二线| 99免费精品视频| 亚洲一区二区三区四区在线免费观看 | 色综合久久88色综合天天| 亚洲欧美偷拍卡通变态| 在线观看网站黄不卡| 日韩精品一二三区| 26uuu亚洲综合色| 99视频有精品| 五月激情综合色| 久久久久97国产精华液好用吗| 99久久夜色精品国产网站| 亚洲线精品一区二区三区八戒| 3d成人h动漫网站入口| 国产一区二区在线免费观看| 亚洲欧美一区二区三区久本道91| 欧美精品在线视频| 久久电影国产免费久久电影| 欧美经典一区二区三区| 欧美亚日韩国产aⅴ精品中极品| 看电影不卡的网站| 中文字幕一区二区三区四区| 欧美色视频一区| 国产一二精品视频| 亚洲美女偷拍久久| 精品国产乱码久久久久久1区2区| 成人av综合在线| 免费成人你懂的| 亚洲视频 欧洲视频| 91精品国产综合久久国产大片 | 日韩欧美一级特黄在线播放| 国产主播一区二区| 亚洲伦理在线免费看| 亚洲精品一区二区三区四区高清| 91丨porny丨国产入口| 男女男精品网站| 亚洲女爱视频在线| 久久蜜桃av一区二区天堂 | 国产色一区二区| 51精品国自产在线| www.久久久久久久久| 麻豆精品在线播放| 亚洲图片欧美色图| 国产精品国产自产拍高清av王其| 欧美成人精品福利| 欧美日韩免费视频| 99精品桃花视频在线观看| 久久精品国产77777蜜臀|