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

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

?? ogrlinestring.cpp

?? mitab,讀取MapInfo的地圖文件
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
    else
        nGType = CPL_MSBWORD32( nGType );

    memcpy( pabyData + 1, &nGType, 4 );
    
/* -------------------------------------------------------------------- */
/*      Copy in the data count.                                         */
/* -------------------------------------------------------------------- */
    memcpy( pabyData+5, &nPointCount, 4 );

/* -------------------------------------------------------------------- */
/*      Copy in the raw data.                                           */
/* -------------------------------------------------------------------- */
    int         i;
    
    if( getCoordinateDimension() == 3 )
    {
        for( i = 0; i < nPointCount; i++ )
        {
            memcpy( pabyData + 9 + 24*i, paoPoints+i, 16 );
            memcpy( pabyData + 9 + 16 + 24*i, padfZ+i, 8 );
        }
    }
    else
        memcpy( pabyData+9, paoPoints, 16 * nPointCount );

/* -------------------------------------------------------------------- */
/*      Swap if needed.                                                 */
/* -------------------------------------------------------------------- */
    if( OGR_SWAP( eByteOrder ) )
    {
        int     nCount;

        nCount = CPL_SWAP32( nPointCount );
        memcpy( pabyData+5, &nCount, 4 );

        for( i = getCoordinateDimension() * nPointCount - 1; i >= 0; i-- )
        {
            CPL_SWAP64PTR( pabyData + 9 + 8 * i );
        }
    }
    
    return OGRERR_NONE;
}

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

OGRErr OGRLineString::importFromWkt( char ** ppszInput )

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

    if( paoPoints != NULL )
    {
        nPointCount = 0;

        CPLFree( paoPoints );
        paoPoints = NULL;
        
        CPLFree( padfZ );
        padfZ = NULL;
    }

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

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

/* -------------------------------------------------------------------- */
/*      Check for EMPTY or (EMPTY).                                     */
/* -------------------------------------------------------------------- */
    const char *pszPreScan;

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

    if( !EQUAL(szToken,"(") )
        return OGRERR_CORRUPT_DATA;
    
    pszPreScan = OGRWktReadToken( pszPreScan, szToken );
    if( EQUAL(szToken,"EMPTY") )
    {
        pszPreScan = OGRWktReadToken( pszPreScan, szToken );

        *ppszInput = (char *) pszPreScan;
        
        if( !EQUAL(szToken,")") )
            return OGRERR_CORRUPT_DATA;
        else
            return OGRERR_NONE;
    }

/* -------------------------------------------------------------------- */
/*      Read the point list.                                            */
/* -------------------------------------------------------------------- */
    int      nMaxPoint = 0;

    nPointCount = 0;

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

    *ppszInput = (char *) pszInput;

    if( padfZ == NULL )
        nCoordDimension = 2;
    else
        nCoordDimension = 3;
    
    return OGRERR_NONE;
}

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

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

{
    int         nMaxString = nPointCount * 40 * 3 + 20;
    int         nRetLen = 0;

/* -------------------------------------------------------------------- */
/*      Handle special empty case.                                      */
/* -------------------------------------------------------------------- */
    if( nPointCount == 0 )
    {
        CPLString osEmpty;
        osEmpty.Printf("%s EMPTY",getGeometryName());
        *ppszDstText = CPLStrdup(osEmpty);
        return OGRERR_NONE;
    }

/* -------------------------------------------------------------------- */
/*      General case.                                                   */
/* -------------------------------------------------------------------- */
    *ppszDstText = (char *) VSIMalloc( nMaxString );
    if( *ppszDstText == NULL )
        return OGRERR_NOT_ENOUGH_MEMORY;

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

    for( int i = 0; i < nPointCount; i++ )
    {
        if( nMaxString <= (int) strlen(*ppszDstText+nRetLen) + 32 + nRetLen )
        {
            CPLDebug( "OGR", 
                      "OGRLineString::exportToWkt() ... buffer overflow.\n"
                      "nMaxString=%d, strlen(*ppszDstText) = %d, i=%d\n"
                      "*ppszDstText = %s", 
                      nMaxString, strlen(*ppszDstText), i, *ppszDstText );

            VSIFree( *ppszDstText );
            *ppszDstText = NULL;
            return OGRERR_NOT_ENOUGH_MEMORY;
        }
        
        if( i > 0 )
            strcat( *ppszDstText + nRetLen, "," );

        nRetLen += strlen(*ppszDstText + nRetLen);
        if( getCoordinateDimension() == 3 )
            OGRMakeWktCoordinate( *ppszDstText + nRetLen,
                                  paoPoints[i].x,
                                  paoPoints[i].y,
                                  padfZ[i],
                                  nCoordDimension );
        else
            OGRMakeWktCoordinate( *ppszDstText + nRetLen,
                                  paoPoints[i].x,
                                  paoPoints[i].y,
                                  0.0,
                                  nCoordDimension );

        nRetLen += strlen(*ppszDstText + nRetLen);
    }

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

    return OGRERR_NONE;
}

/************************************************************************/
/*                             get_Length()                             */
/*                                                                      */
/*      For now we return a simple euclidian 2D distance.               */
/************************************************************************/

double OGRLineString::get_Length() const

{
    double      dfLength = 0;
    int         i;

    for( i = 0; i < nPointCount-1; i++ )
    {
        double      dfDeltaX, dfDeltaY;

        dfDeltaX = paoPoints[i+1].x - paoPoints[i].x;
        dfDeltaY = paoPoints[i+1].y - paoPoints[i].y;
        dfLength += sqrt(dfDeltaX*dfDeltaX + dfDeltaY*dfDeltaY);
    }
    
    return dfLength;
}

/************************************************************************/
/*                             StartPoint()                             */
/************************************************************************/

void OGRLineString::StartPoint( OGRPoint * poPoint ) const

{
    getPoint( 0, poPoint );
}

/************************************************************************/
/*                              EndPoint()                              */
/************************************************************************/

void OGRLineString::EndPoint( OGRPoint * poPoint ) const

{
    getPoint( nPointCount-1, poPoint );
}

/************************************************************************/
/*                               Value()                                */
/*                                                                      */
/*      Get an interpolated point at some distance along the curve.     */
/************************************************************************/

void OGRLineString::Value( double dfDistance, OGRPoint * poPoint ) const

{
    double      dfLength = 0;
    int         i;

    if( dfDistance < 0 )
    {
        StartPoint( poPoint );
        return;
    }

    for( i = 0; i < nPointCount-1; i++ )
    {
        double      dfDeltaX, dfDeltaY, dfSegLength;

        dfDeltaX = paoPoints[i+1].x - paoPoints[i].x;
        dfDeltaY = paoPoints[i+1].y - paoPoints[i].y;
        dfSegLength = sqrt(dfDeltaX*dfDeltaX + dfDeltaY*dfDeltaY);

        if (dfSegLength > 0)
        {
            if( (dfLength <= dfDistance) && ((dfLength + dfSegLength) >= 
                                             dfDistance) )
            {
                double      dfRatio;

                dfRatio = (dfDistance - dfLength) / dfSegLength;

                poPoint->setX( paoPoints[i].x * (1 - dfRatio)
                               + paoPoints[i+1].x * dfRatio );
                poPoint->setY( paoPoints[i].y * (1 - dfRatio)
                               + paoPoints[i+1].y * dfRatio );

                if( getCoordinateDimension() == 3 )
                    poPoint->setZ( padfZ[i] * (1 - dfRatio)
                                   + padfZ[i] * dfRatio );
                
                return;
            }

            dfLength += dfSegLength;
        }
    }
    
    EndPoint( poPoint );
}

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

void OGRLineString::getEnvelope( OGREnvelope * psEnvelope ) const

{
    double      dfMinX, dfMinY, dfMaxX, dfMaxY;

    if( nPointCount == 0 )
        return;
    
    dfMinX = dfMaxX = paoPoints[0].x;
    dfMinY = dfMaxY = paoPoints[0].y;

    for( int iPoint = 1; iPoint < nPointCount; iPoint++ )
    {
        if( dfMaxX < paoPoints[iPoint].x )
            dfMaxX = paoPoints[iPoint].x;
        if( dfMaxY < paoPoints[iPoint].y )
            dfMaxY = paoPoints[iPoint].y;
        if( dfMinX > paoPoints[iPoint].x )
            dfMinX = paoPoints[iPoint].x;
        if( dfMinY > paoPoints[iPoint].y )
            dfMinY = paoPoints[iPoint].y;
    }

    psEnvelope->MinX = dfMinX;
    psEnvelope->MaxX = dfMaxX;
    psEnvelope->MinY = dfMinY;
    psEnvelope->MaxY = dfMaxY;
}

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

OGRBoolean OGRLineString::Equals( OGRGeometry * poOther ) const

{
    OGRLineString       *poOLine = (OGRLineString *) poOther;
    
    if( poOLine == this )
        return TRUE;
    
    if( poOther->getGeometryType() != getGeometryType() )
        return FALSE;

    // we should eventually test the SRS.

    if( getNumPoints() != poOLine->getNumPoints() )
        return FALSE;

    for( int iPoint = 0; iPoint < getNumPoints(); iPoint++ )
    {
        if( getX(iPoint) != poOLine->getX(iPoint)
            || getY(iPoint) != poOLine->getY(iPoint) 
            || getZ(iPoint) != poOLine->getZ(iPoint) )
            return FALSE;
    }

    return TRUE;
}

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

OGRErr OGRLineString::transform( OGRCoordinateTransformation *poCT )

{
#ifdef DISABLE_OGRGEOM_TRANSFORM
    return OGRERR_FAILURE;
#else
    double      *xyz;
    int         i;

/* -------------------------------------------------------------------- */
/*      Because we don't want to partially transform this geometry      */
/*      (if some points fail after some have succeeded) we will         */
/*      instead make a copy of the points to operate on.                */
/* -------------------------------------------------------------------- */
    xyz = (double *) CPLMalloc(sizeof(double) * nPointCount * 3);
    if( xyz == NULL )
        return OGRERR_NOT_ENOUGH_MEMORY;

    for( i = 0; i < nPointCount; i++ )
    {
        xyz[i  ] = paoPoints[i].x;
        xyz[i+nPointCount] = paoPoints[i].y;
        if( padfZ )
            xyz[i+nPointCount*2] = padfZ[i];
        else
            xyz[i+nPointCount*2] = 0.0;
    }

/* -------------------------------------------------------------------- */
/*      Transform and reapply.                                          */
/* -------------------------------------------------------------------- */
    if( !poCT->Transform( nPointCount, xyz, xyz + nPointCount, 
                          xyz+nPointCount*2 ) )
    {
        CPLFree( xyz );
        return OGRERR_FAILURE;
    }
    else
    {
        setPoints( nPointCount, xyz, xyz+nPointCount, xyz+nPointCount*2 );
        CPLFree( xyz );

        assignSpatialReference( poCT->GetTargetCS() );

        return OGRERR_NONE;
    }
#endif
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产亚洲美州欧州综合国| 国产成人综合亚洲网站| 五月婷婷综合激情| 蜜臀99久久精品久久久久久软件| 九九视频精品免费| 99re在线视频这里只有精品| 欧美一卡二卡在线观看| 亚洲色图19p| 韩日欧美一区二区三区| 欧美中文字幕一区| 国产精品第13页| 国产精品456露脸| 欧美肥妇free| 亚洲高清免费视频| 一本一道久久a久久精品综合蜜臀| 欧美va亚洲va香蕉在线| 日韩精品视频网| 4438x亚洲最大成人网| 一个色妞综合视频在线观看| 在线视频你懂得一区| 久久综合久久99| 国产伦精品一区二区三区免费迷 | 精品少妇一区二区三区视频免付费| 亚洲视频在线一区| av电影一区二区| 日韩毛片在线免费观看| 色综合天天做天天爱| √…a在线天堂一区| 成人黄色777网| 亚洲欧美一区二区视频| 在线观看精品一区| 日本不卡视频在线观看| 欧美mv日韩mv国产| 成人涩涩免费视频| 亚洲综合在线五月| 日韩精品最新网址| av男人天堂一区| 香蕉av福利精品导航| 欧美一级日韩免费不卡| 成人免费视频一区| 亚洲午夜羞羞片| 国产亚洲视频系列| 欧美色视频一区| 成人性生交大片免费看中文| 亚洲一区av在线| 国产喂奶挤奶一区二区三区| 欧美伊人精品成人久久综合97| 国产一区二区三区在线观看精品| 亚洲男帅同性gay1069| 欧美一区在线视频| 在线免费观看日韩欧美| av激情综合网| 成人三级伦理片| 亚洲欧美aⅴ...| 亚洲国产精品二十页| 欧美性极品少妇| 99久久精品免费精品国产| 国产真实乱对白精彩久久| 亚洲综合免费观看高清完整版在线 | 精品视频资源站| 成人黄色小视频在线观看| 国产成a人亚洲精| 国产精品888| 高清在线观看日韩| 成人av在线一区二区三区| 波多野结衣一区二区三区| 大陆成人av片| 在线免费不卡电影| 91麻豆精品国产91久久久久久 | 国产校园另类小说区| 久久精品夜色噜噜亚洲aⅴ| 国产拍揄自揄精品视频麻豆| 中文字幕免费观看一区| 亚洲精品亚洲人成人网在线播放| 亚洲黄色av一区| 日本中文字幕一区二区视频| 经典三级视频一区| jlzzjlzz亚洲日本少妇| 欧美视频中文字幕| 欧美成人激情免费网| 国产精品蜜臀av| 日韩黄色免费网站| 91麻豆6部合集magnet| 欧美一区二区成人| 一个色综合av| 国产一区美女在线| 精品日产卡一卡二卡麻豆| 一区二区三区四区在线免费观看| 久久国产尿小便嘘嘘| 欧美一区二区久久| 性做久久久久久免费观看| 国产91精品入口| 久久嫩草精品久久久精品一| 亚洲午夜激情av| 91福利视频网站| 亚洲自拍都市欧美小说| 久久久国产一区二区三区四区小说 | 国产精品免费视频网站| 亚洲天堂2016| 亚洲三级在线播放| 极品少妇一区二区| 欧美日韩精品欧美日韩精品一综合| 精品少妇一区二区三区免费观看 | 国产99久久久国产精品免费看| 欧美日韩国产综合视频在线观看| 欧美一个色资源| 日韩极品在线观看| 欧美日韩国产综合一区二区三区 | 国产成人超碰人人澡人人澡| 欧美三级资源在线| 亚洲一区在线观看视频| 色视频欧美一区二区三区| 亚洲一级二级在线| 欧美美女激情18p| 日产精品久久久久久久性色| 欧美日韩午夜精品| 日本不卡视频一二三区| 久久久久国色av免费看影院| 国产一区二区三区精品视频| 久久综合色8888| 成人免费视频网站在线观看| 国产亚洲一区二区三区| 国产suv精品一区二区883| 一区二区三区中文字幕| 一本久道久久综合中文字幕| 亚洲成人免费在线| 久久午夜电影网| 欧美美女一区二区| 国产一区二区免费在线| 中文字幕一区二区三区在线播放| 国内精品第一页| 亚洲三级视频在线观看| 欧美福利视频一区| 国产毛片一区二区| 一区二区三区小说| 日韩欧美在线不卡| av成人免费在线| 久久精品国产亚洲a| 亚洲视频在线观看三级| 91精品国产91热久久久做人人| 国产福利视频一区二区三区| 亚洲欧美激情在线| 日韩午夜激情免费电影| 91一区二区三区在线观看| 亚洲午夜在线电影| 亚洲欧美在线观看| 欧美精品一区二区蜜臀亚洲| 91网页版在线| 国产成人免费视频网站| 中文字幕第一区综合| 精品日韩在线观看| 欧美日韩在线播放| 欧美性xxxxx极品少妇| 丁香啪啪综合成人亚洲小说 | 激情综合网最新| 欧美精品一区二区三区视频| 欧美日韩一区二区在线观看| 成人激情开心网| 国产成人三级在线观看| 国产伦精品一区二区三区免费迷| 日韩国产精品久久| 免费看欧美美女黄的网站| 国产欧美精品一区二区三区四区| 久久亚洲精精品中文字幕早川悠里| 欧美日韩成人综合| 日韩欧美综合在线| 国产片一区二区| 亚洲美女偷拍久久| 亚洲一级电影视频| 亚洲一区二区三区四区在线| 亚洲国产日韩综合久久精品| 毛片av一区二区| 国产成人免费网站| 欧美无砖专区一中文字| 日韩三级.com| 一区二区三区不卡视频| 日本在线不卡一区| 99免费精品在线| 欧美精品一区二区三区在线播放 | 国产乱国产乱300精品| 欧美午夜精品一区二区三区| 精品久久五月天| 天堂午夜影视日韩欧美一区二区| 久久99这里只有精品| 5566中文字幕一区二区电影| 亚洲天堂av一区| 亚洲免费在线视频一区 二区| 亚洲福利视频一区二区| 玖玖九九国产精品| 欧美日韩精品一区二区三区| 亚洲精品大片www| 色综合久久精品| 亚洲人成精品久久久久久| 国产又粗又猛又爽又黄91精品| 日韩欧美另类在线| 丰满少妇在线播放bd日韩电影| 欧美美女一区二区| 国产一区二区在线观看视频| 国产精品久久久久久久久久久免费看 | 欧美在线制服丝袜|