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

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

?? ogrgeometrycollection.cpp

?? mitab,讀取MapInfo的地圖文件
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
/* -------------------------------------------------------------------- */
    if( nGeomCount != 0 )
    {
        for( int iGeom = 0; iGeom < nGeomCount; iGeom++ )
            delete papoGeoms[iGeom];

        OGRFree( papoGeoms );
        papoGeoms = NULL;
    }
    
/* -------------------------------------------------------------------- */
/*      Get the geometry count.                                         */
/* -------------------------------------------------------------------- */
    memcpy( &nGeomCount, pabyData + 5, 4 );
    
    if( OGR_SWAP( eByteOrder ) )
        nGeomCount = CPL_SWAP32(nGeomCount);

    papoGeoms = (OGRGeometry **) OGRMalloc(sizeof(void*) * nGeomCount);

    nDataOffset = 9;
    if( nSize != -1 )
        nSize -= nDataOffset;

    nCoordinateDimension = 0; // unknown

/* -------------------------------------------------------------------- */
/*      Get the Geoms.                                                  */
/* -------------------------------------------------------------------- */
    for( int iGeom = 0; iGeom < nGeomCount; iGeom++ )
    {
        OGRErr  eErr;

        eErr = OGRGeometryFactory::
            createFromWkb( pabyData + nDataOffset, NULL,
                           papoGeoms + iGeom, nSize );

        if( eErr != OGRERR_NONE )
        {
            nGeomCount = iGeom;
            return eErr;
        }

        if( nSize != -1 )
            nSize -= papoGeoms[iGeom]->WkbSize();

        nDataOffset += papoGeoms[iGeom]->WkbSize();
    }
    
    return OGRERR_NONE;
}

/************************************************************************/
/*                            exportToWkb()                             */
/*                                                                      */
/*      Build a well known binary representation of this object.        */
/************************************************************************/

OGRErr  OGRGeometryCollection::exportToWkb( OGRwkbByteOrder eByteOrder,
                                            unsigned char * pabyData ) const

{
    int         nOffset;
    
/* -------------------------------------------------------------------- */
/*      Set the byte order.                                             */
/* -------------------------------------------------------------------- */
    pabyData[0] = DB2_V72_UNFIX_BYTE_ORDER((unsigned char) eByteOrder);

/* -------------------------------------------------------------------- */
/*      Set the geometry feature type, ensuring that 3D flag is         */
/*      preserved.                                                      */
/* -------------------------------------------------------------------- */
    GUInt32 nGType = getGeometryType();
    
    if( eByteOrder == wkbNDR )
        nGType = CPL_LSBWORD32( nGType );
    else
        nGType = CPL_MSBWORD32( nGType );

    memcpy( pabyData + 1, &nGType, 4 );
    
/* -------------------------------------------------------------------- */
/*      Copy in the raw data.                                           */
/* -------------------------------------------------------------------- */
    if( OGR_SWAP( eByteOrder ) )
    {
        int     nCount;

        nCount = CPL_SWAP32( nGeomCount );
        memcpy( pabyData+5, &nCount, 4 );
    }
    else
    {
        memcpy( pabyData+5, &nGeomCount, 4 );
    }
    
    nOffset = 9;
    
/* ==================================================================== */
/*      Serialize each of the Geoms.                                    */
/* ==================================================================== */
    for( int iGeom = 0; iGeom < nGeomCount; iGeom++ )
    {
        papoGeoms[iGeom]->exportToWkb( eByteOrder, pabyData + nOffset );

        nOffset += papoGeoms[iGeom]->WkbSize();
    }
    
    return OGRERR_NONE;
}

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

OGRErr OGRGeometryCollection::importFromWkt( char ** ppszInput )

{

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

/* -------------------------------------------------------------------- */
/*      Clear existing Geoms.                                           */
/* -------------------------------------------------------------------- */
    if( nGeomCount > 0 )
    {
        for( iGeom = 0; iGeom < nGeomCount; iGeom++ )
            delete papoGeoms[iGeom];
        
        nGeomCount = 0;
        CPLFree( papoGeoms );
    }

/* -------------------------------------------------------------------- */
/*      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;

/* -------------------------------------------------------------------- */
/*      The next character should be a ( indicating the start of the    */
/*      list of objects.                                                */
/* -------------------------------------------------------------------- */
    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 subgeometry in turn.                                  */
/* ==================================================================== */
    do
    {
        OGRGeometry *poGeom = NULL;
        OGRErr      eErr;

        eErr = OGRGeometryFactory::createFromWkt( (char **) &pszInput,
                                                  NULL, &poGeom );
        if( eErr != OGRERR_NONE )
            return eErr;

        addGeometryDirectly( poGeom );

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

/* -------------------------------------------------------------------- */
/*      freak if we don't get a closing bracket.                        */
/* -------------------------------------------------------------------- */
    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 OGRGeometryCollection::exportToWkt( char ** ppszDstText ) const

{
    char        **papszGeoms;
    int         iGeom, nCumulativeLength = 0;
    OGRErr      eErr;

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

/* -------------------------------------------------------------------- */
/*      Build a list of strings containing the stuff for each Geom.     */
/* -------------------------------------------------------------------- */
    papszGeoms = (char **) CPLCalloc(sizeof(char *),nGeomCount);

    for( iGeom = 0; iGeom < nGeomCount; iGeom++ )
    {
        eErr = papoGeoms[iGeom]->exportToWkt( &(papszGeoms[iGeom]) );
        if( eErr != OGRERR_NONE )
            return eErr;

        nCumulativeLength += strlen(papszGeoms[iGeom]);
    }
    
/* -------------------------------------------------------------------- */
/*      Allocate the right amount of space for the aggregated string    */
/* -------------------------------------------------------------------- */
    *ppszDstText = (char *) VSIMalloc(nCumulativeLength + nGeomCount + 23);

    if( *ppszDstText == NULL )
        return OGRERR_NOT_ENOUGH_MEMORY;

/* -------------------------------------------------------------------- */
/*      Build up the string, freeing temporary strings as we go.        */
/* -------------------------------------------------------------------- */
    strcpy( *ppszDstText, getGeometryName() );
    strcat( *ppszDstText, " (" );

    for( iGeom = 0; iGeom < nGeomCount; iGeom++ )
    {                                                           
        if( iGeom > 0 )
            strcat( *ppszDstText, "," );
        
        strcat( *ppszDstText, papszGeoms[iGeom] );
        VSIFree( papszGeoms[iGeom] );
    }

    strcat( *ppszDstText, ")" );

    CPLFree( papszGeoms );

    return OGRERR_NONE;
}

/************************************************************************/
/*                            getEnvelope()                             */
/************************************************************************/

void OGRGeometryCollection::getEnvelope( OGREnvelope * psEnvelope ) const

{
    OGREnvelope         oGeomEnv;
    
    if( nGeomCount == 0 )
        return;

    papoGeoms[0]->getEnvelope( psEnvelope );

    for( int iGeom = 1; iGeom < nGeomCount; iGeom++ )
    {
        papoGeoms[iGeom]->getEnvelope( &oGeomEnv );

        if( psEnvelope->MinX > oGeomEnv.MinX )
            psEnvelope->MinX = oGeomEnv.MinX;
        if( psEnvelope->MinY > oGeomEnv.MinY )
            psEnvelope->MinY = oGeomEnv.MinY;
        if( psEnvelope->MaxX < oGeomEnv.MaxX )
            psEnvelope->MaxX = oGeomEnv.MaxX;
        if( psEnvelope->MaxY < oGeomEnv.MaxY )
            psEnvelope->MaxY = oGeomEnv.MaxY;
    }
}

/************************************************************************/
/*                               Equals()                               */
/************************************************************************/

OGRBoolean OGRGeometryCollection::Equals( OGRGeometry * poOther ) const

{
    OGRGeometryCollection *poOGC = (OGRGeometryCollection *) poOther;

    if( poOGC == this )
        return TRUE;
    
    if( poOther->getGeometryType() != getGeometryType() )
        return FALSE;

    if( getNumGeometries() != poOGC->getNumGeometries() )
        return FALSE;
    
    // we should eventually test the SRS.

    for( int iGeom = 0; iGeom < nGeomCount; iGeom++ )
    {
        if( !getGeometryRef(iGeom)->Equals(poOGC->getGeometryRef(iGeom)) )
            return FALSE;
    }

    return TRUE;
}

/************************************************************************/
/*                             transform()                              */
/************************************************************************/

OGRErr OGRGeometryCollection::transform( OGRCoordinateTransformation *poCT )

{
#ifdef DISABLE_OGRGEOM_TRANSFORM
    return OGRERR_FAILURE;
#else
    for( int iGeom = 0; iGeom < nGeomCount; iGeom++ )
    {
        OGRErr  eErr;

        eErr = papoGeoms[iGeom]->transform( poCT );
        if( eErr != OGRERR_NONE )
        {
            if( iGeom != 0 )
            {
                CPLDebug("OGR", 
                         "OGRGeometryCollection::transform() failed for a geometry other\n"
                         "than the first, meaning some geometries are transformed\n"
                         "and some are not!\n" );

                return OGRERR_FAILURE;
            }

            return eErr;
        }
    }

    assignSpatialReference( poCT->GetTargetCS() );

    return OGRERR_NONE;
#endif
}

/************************************************************************/
/*                             closeRings()                             */
/************************************************************************/

void OGRGeometryCollection::closeRings()

{
    for( int iGeom = 0; iGeom < nGeomCount; iGeom++ )
    {
        if( wkbFlatten(papoGeoms[iGeom]->getGeometryType()) == wkbPolygon )
            ((OGRPolygon *) papoGeoms[iGeom])->closeRings();
    }
}

/************************************************************************/
/*                       setCoordinateDimension()                       */
/************************************************************************/

void OGRGeometryCollection::setCoordinateDimension( int nNewDimension )

{
    for( int iGeom = 0; iGeom < nGeomCount; iGeom++ )
    {
        papoGeoms[iGeom]->setCoordinateDimension( nNewDimension );
    }

    OGRGeometry::setCoordinateDimension( nNewDimension );
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91丨porny丨中文| 六月丁香婷婷久久| 91麻豆swag| 中文字幕日本不卡| 色婷婷久久久亚洲一区二区三区| 亚洲婷婷在线视频| 欧美亚洲愉拍一区二区| 天涯成人国产亚洲精品一区av| 欧美精品 日韩| 麻豆精品视频在线| 久久夜色精品国产噜噜av| 国产成人精品免费在线| 亚洲天堂成人网| 777色狠狠一区二区三区| 极品美女销魂一区二区三区| 欧美国产一区视频在线观看| 色综合久久中文字幕| 天堂一区二区在线| 久久久精品免费观看| 99re66热这里只有精品3直播| 一区二区三区高清| 日韩欧美激情一区| av一本久道久久综合久久鬼色| 一个色妞综合视频在线观看| 日韩一级在线观看| 白白色 亚洲乱淫| 日韩激情视频在线观看| 国产欧美日韩综合| 欧美日韩一级黄| 久久99久久99小草精品免视看| 国产精品视频九色porn| 欧美性一区二区| 国产成人综合自拍| 亚洲444eee在线观看| 久久综合网色—综合色88| 一本一道综合狠狠老| 捆绑紧缚一区二区三区视频| 亚洲天天做日日做天天谢日日欢 | 国产丝袜美腿一区二区三区| www.欧美.com| 99久久精品国产毛片| 日韩欧美色综合| 99国产精品久| 激情五月激情综合网| 亚洲欧美日韩国产综合在线| 精品国产一区二区三区av性色| 91黄视频在线| 成人av第一页| 开心九九激情九九欧美日韩精美视频电影 | 国产精品无圣光一区二区| 欧美另类videos死尸| 91免费版在线| 国产精品1区2区3区| 偷拍日韩校园综合在线| 综合av第一页| 中文字幕成人av| 精品久久久久久久一区二区蜜臀| 在线看国产一区二区| 粉嫩av一区二区三区| 男女激情视频一区| 五月开心婷婷久久| 亚洲激情成人在线| 国产精品国产三级国产有无不卡| 精品国产91久久久久久久妲己| 欧美日韩高清不卡| 欧美亚一区二区| 91福利区一区二区三区| 91麻豆蜜桃一区二区三区| 国产精品99久久久| 久久日韩精品一区二区五区| 在线综合视频播放| 欧美伊人久久大香线蕉综合69| 91麻豆精品国产91久久久资源速度| 亚洲精选一二三| 91精品免费观看| 欧美日韩视频在线一区二区| 91免费在线播放| 色欧美片视频在线观看| 91在线无精精品入口| aaa亚洲精品| 99国产精品视频免费观看| 成人免费福利片| a亚洲天堂av| 91在线高清观看| 在线亚洲免费视频| 欧美视频一区二区在线观看| 欧美精品久久99| 欧美蜜桃一区二区三区| 欧美一区二区三区精品| 欧美一区二区在线播放| 欧美一区二区福利在线| 精品国产凹凸成av人网站| 久久嫩草精品久久久久| 欧美国产1区2区| 亚洲丝袜美腿综合| 亚洲一线二线三线久久久| 亚洲一区二区三区四区五区黄 | 欧美大片在线观看| 久久久高清一区二区三区| 亚洲国产精品精华液2区45| 国产精品五月天| 亚洲精品国产精华液| 亚洲第一久久影院| 精品一区二区三区免费播放| 国产在线精品免费| bt欧美亚洲午夜电影天堂| 色综合天天做天天爱| 91麻豆精品国产91久久久 | 欧美国产1区2区| 麻豆国产欧美一区二区三区| 久久99精品国产麻豆不卡| 成人精品视频.| 欧美日韩一区中文字幕| 久久综合九色欧美综合狠狠| 自拍av一区二区三区| 丝袜亚洲精品中文字幕一区| 国产精品中文欧美| 在线中文字幕不卡| 欧美tickling网站挠脚心| 亚洲视频你懂的| 日本免费新一区视频| 粉嫩av一区二区三区粉嫩| 欧美老女人第四色| 国产精品乱人伦中文| 天使萌一区二区三区免费观看| 国产suv一区二区三区88区| 欧美无砖专区一中文字| 久久久99精品久久| 五月婷婷激情综合网| 99久久久久免费精品国产| 日韩欧美一区二区免费| 亚洲丝袜制服诱惑| 国产毛片精品一区| 欧美一级精品在线| 亚洲猫色日本管| 国产精品18久久久| 69久久夜色精品国产69蝌蚪网| 国产精品毛片高清在线完整版| 蜜臀av国产精品久久久久 | 91丨国产丨九色丨pron| 久久在线观看免费| 日韩专区在线视频| 91日韩精品一区| 国产目拍亚洲精品99久久精品| 美女视频黄a大片欧美| 欧美午夜精品免费| 日韩码欧中文字| 成人黄色a**站在线观看| 精品欧美黑人一区二区三区| 婷婷开心激情综合| 欧美中文一区二区三区| 国产精品久久久久久久蜜臀| 国产精品亚洲成人| 精品国产乱码久久久久久蜜臀| 五月激情六月综合| 在线观看av一区| 中文字幕综合网| 成人激情电影免费在线观看| 国产调教视频一区| 国产精品一区专区| 精品裸体舞一区二区三区| 蜜臀av性久久久久蜜臀av麻豆| 欧美日韩mp4| 天天色综合成人网| 91精品国产综合久久精品图片 | 天堂va蜜桃一区二区三区漫画版| 在线观看av一区| 亚洲一区二区在线免费看| 在线观看www91| 亚洲国产精品一区二区尤物区| 欧美在线免费观看视频| 一区二区久久久| 日本韩国一区二区| 亚洲国产另类av| 3atv一区二区三区| 蜜桃91丨九色丨蝌蚪91桃色| 欧美变态tickle挠乳网站| 激情国产一区二区| 国产视频911| 成人免费高清视频在线观看| 一区在线观看视频| 在线观看不卡一区| 日韩综合在线视频| 精品国产乱子伦一区| 成人福利视频在线看| 亚洲女厕所小便bbb| 欧美性色欧美a在线播放| 首页欧美精品中文字幕| 久久久91精品国产一区二区三区| 99久久免费视频.com| 亚洲三级在线看| 欧美日韩国产精品成人| 裸体一区二区三区| 精品国产乱码久久久久久老虎 | 亚洲丝袜自拍清纯另类| 精品视频在线免费看| 狂野欧美性猛交blacked| 欧美高清一级片在线观看| 91色.com| 国内精品不卡在线|