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

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

?? ogrocilayer.cpp

?? 支持各種柵格圖像和矢量圖像讀取的庫
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
/****************************************************************************** * $Id: ogrocilayer.cpp 10646 2007-01-18 02:38:10Z warmerdam $ * * Project:  Oracle Spatial Driver * Purpose:  Implementation of the OGROCILayer class.  This is layer semantics *           shared between table accessors and ExecuteSQL() result  *           pseudo-layers. * Author:   Frank Warmerdam, warmerdam@pobox.com * ****************************************************************************** * Copyright (c) 2002, Frank Warmerdam <warmerdam@pobox.com> * * 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_oci.h"#include "cpl_conv.h"CPL_CVSID("$Id: ogrocilayer.cpp 10646 2007-01-18 02:38:10Z warmerdam $");/************************************************************************//*                           OGROCILayer()                               *//************************************************************************/OGROCILayer::OGROCILayer(){    poDS = NULL;    poStatement = NULL;    pszQueryStatement = NULL;    pszGeomName = NULL;    iGeomColumn = -1;    pszFIDName = NULL;    iFIDColumn = -1;    hLastGeom = NULL;    hLastGeomInd = NULL;    iNextShapeId = 0;}/************************************************************************//*                            ~OGROCILayer()                             *//************************************************************************/OGROCILayer::~OGROCILayer(){    if( m_nFeaturesRead > 0 && poFeatureDefn != NULL )    {        CPLDebug( "OCI", "%d features read on layer '%s'.",                  (int) m_nFeaturesRead,                   poFeatureDefn->GetName() );    }    ResetReading();    CPLFree( pszGeomName );    pszGeomName = NULL;    CPLFree( pszFIDName );    pszFIDName = NULL;    CPLFree( pszQueryStatement );    pszQueryStatement = NULL;    if( poFeatureDefn != NULL )        poFeatureDefn->Release();}/************************************************************************//*                            ResetReading()                            *//************************************************************************/void OGROCILayer::ResetReading(){    if( poStatement != NULL )        delete poStatement;    poStatement = NULL;    iNextShapeId = 0;}/************************************************************************//*                           GetNextFeature()                           *//*                                                                      *//*      By default we implement the full spatial and attribute query    *//*      semantics manually here.  The table query class will            *//*      override this method and implement these inline, but the        *//*      simple SELECT statement evaluator (OGROCISelectLayer) will      *//*      depend us this code implementing additional spatial or          *//*      attribute query semantics.                                      *//************************************************************************/OGRFeature *OGROCILayer::GetNextFeature(){    for( ; TRUE; )    {        OGRFeature      *poFeature;        poFeature = GetNextRawFeature();        if( poFeature == NULL )            return NULL;        if( (m_poFilterGeom == NULL            || FilterGeometry( poFeature->GetGeometryRef() ) )            && (m_poAttrQuery == NULL                || m_poAttrQuery->Evaluate( poFeature )) )            return poFeature;        delete poFeature;    }}/************************************************************************//*                         GetNextRawFeature()                          *//************************************************************************/OGRFeature *OGROCILayer::GetNextRawFeature(){/* -------------------------------------------------------------------- *//*      Do we need to establish an initial query?                       *//* -------------------------------------------------------------------- */    if( iNextShapeId == 0 && poStatement == NULL )    {        if( !ExecuteQuery(pszQueryStatement) )            return NULL;    }/* -------------------------------------------------------------------- *//*      Have we run out of query results, such that we have no          *//*      statement left?                                                 *//* -------------------------------------------------------------------- */    if( poStatement == NULL )        return NULL;/* -------------------------------------------------------------------- *//*      Are we in some sort of error condition?                         *//* -------------------------------------------------------------------- */    hLastGeom = NULL;    char **papszResult = poStatement->SimpleFetchRow();    if( papszResult == NULL )    {        iNextShapeId = MAX(1,iNextShapeId);        delete poStatement;        poStatement = NULL;        return NULL;    }/* -------------------------------------------------------------------- *//*      Create a feature from the current result.                       *//* -------------------------------------------------------------------- */    int         iField;    OGRFeature *poFeature = new OGRFeature( poFeatureDefn );    poFeature->SetFID( iNextShapeId );    iNextShapeId++;    m_nFeaturesRead++;    if( iFIDColumn != -1 && papszResult[iFIDColumn] != NULL )        poFeature->SetFID( atoi(papszResult[iFIDColumn]) );    for( iField = 0; iField < poFeatureDefn->GetFieldCount(); iField++ )    {        if( papszResult[iField] != NULL )            poFeature->SetField( iField, papszResult[iField] );    }/* -------------------------------------------------------------------- *//*      Translate geometry if we have it.                               *//* -------------------------------------------------------------------- */    if( iGeomColumn != -1 )    {        poFeature->SetGeometryDirectly( TranslateGeometry() );        OGROCISession      *poSession = poDS->GetSession();        if( poFeature->GetGeometryRef() != NULL && hLastGeom != NULL )            poSession->Failed(                 OCIObjectFree(poSession->hEnv, poSession->hError,                               (dvoid *) hLastGeom,                               (ub2)OCI_OBJECTFREE_FORCE) );        hLastGeom = NULL;        hLastGeomInd = NULL;    }    nResultOffset++;    return poFeature;}/************************************************************************//*                            ExecuteQuery()                            *//*                                                                      *//*      This is invoke when the first request for a feature is          *//*      made.  It executes the query, and binds columns as needed.      *//*      The OGROCIStatement is used for most of the work.               *//************************************************************************/int OGROCILayer::ExecuteQuery( const char *pszReqQuery ){    OGROCISession      *poSession = poDS->GetSession();    CPLAssert( pszReqQuery != NULL );    CPLAssert( poStatement == NULL );/* -------------------------------------------------------------------- *//*      Execute the query.                                              *//* -------------------------------------------------------------------- */    poStatement = new OGROCIStatement( poSession );    if( poStatement->Execute( pszReqQuery ) != CE_None )    {        delete poStatement;        poStatement = NULL;        return FALSE;    }    nResultOffset = 0;/* -------------------------------------------------------------------- *//*      Do additional work binding the geometry column.                 *//* -------------------------------------------------------------------- */    if( iGeomColumn != -1 )    {        OCIDefine *hGDefine = NULL;        if( poSession->Failed(              OCIDefineByPos(poStatement->GetStatement(), &hGDefine,                            poSession->hError,                           (ub4) iGeomColumn+1, (dvoid *)0, (sb4)0, SQLT_NTY,                            (dvoid *)0, (ub2 *)0, (ub2 *)0, (ub4)OCI_DEFAULT),            "OCIDefineByPos(geometry)") )            return FALSE;                if( poSession->Failed(             OCIDefineObject(hGDefine, poSession->hError,                             poSession->hGeometryTDO,                            (dvoid **) &hLastGeom, (ub4 *)0,                             (dvoid **) &hLastGeomInd, (ub4 *)0 ),            "OCIDefineObject") )            return FALSE;    }    return TRUE;}/************************************************************************//*                         TranslateGeometry()                          *//************************************************************************/OGRGeometry *OGROCILayer::TranslateGeometry(){    OGROCISession      *poSession = poDS->GetSession();/* -------------------------------------------------------------------- *//*      Is the geometry NULL?                                           *//* -------------------------------------------------------------------- */    if( hLastGeom == NULL || hLastGeomInd == NULL         || hLastGeomInd->_atomic == OCI_IND_NULL )        return NULL;/* -------------------------------------------------------------------- *//*      Get the size of the sdo_elem_info and sdo_ordinates arrays.     *//* -------------------------------------------------------------------- */    int nElemCount, nOrdCount;    if( poSession->Failed(         OCICollSize( poSession->hEnv, poSession->hError,                      (OCIColl *)(hLastGeom->sdo_elem_info), &nElemCount),        "OCICollSize(sdo_elem_info)" ) )        return NULL;    if( poSession->Failed(         OCICollSize( poSession->hEnv, poSession->hError,                      (OCIColl *)(hLastGeom->sdo_ordinates), &nOrdCount),        "OCICollSize(sdo_ordinates)" ) )        return NULL;/* -------------------------------------------------------------------- *//*      Get the GType.                                                  *//* -------------------------------------------------------------------- */    int nGType;    if( poSession->Failed(         OCINumberToInt(poSession->hError, &(hLastGeom->sdo_gtype),                       (uword)sizeof(int), OCI_NUMBER_SIGNED,                       (dvoid *)&nGType),        "OCINumberToInt(GType)" ) )        return NULL;/* -------------------------------------------------------------------- *//*      Handle point data directly from built-in point info.            *//* -------------------------------------------------------------------- */    if( ORA_GTYPE_MATCH(nGType,ORA_GTYPE_POINT)        && hLastGeomInd->sdo_point._atomic == OCI_IND_NOTNULL        && hLastGeomInd->sdo_point.x == OCI_IND_NOTNULL        && hLastGeomInd->sdo_point.y == OCI_IND_NOTNULL )    {        double     dfX, dfY, dfZ = 0.0;        OCINumberToReal(poSession->hError, &(hLastGeom->sdo_point.x),                         (uword)sizeof(double), (dvoid *)&dfX);        OCINumberToReal(poSession->hError, &(hLastGeom->sdo_point.y),                         (uword)sizeof(double), (dvoid *)&dfY);        if( hLastGeomInd->sdo_point.z == OCI_IND_NOTNULL )            OCINumberToReal(poSession->hError, &(hLastGeom->sdo_point.z),                             (uword)sizeof(double), (dvoid *)&dfZ);        return new OGRPoint( dfX, dfY, dfZ );    }/* -------------------------------------------------------------------- *//*      Establish the dimension.                                        *//* -------------------------------------------------------------------- */    int nDimension = MAX(2,(nGType / 1000));/* -------------------------------------------------------------------- *//*      If this is a sort of container geometry, create the             *//*      container now.                                                  *//* -------------------------------------------------------------------- */    OGRGeometryCollection *poCollection = NULL;    OGRPolygon *poPolygon = NULL;    if( ORA_GTYPE_MATCH(nGType,ORA_GTYPE_POLYGON) )        poPolygon = new OGRPolygon();    else if( ORA_GTYPE_MATCH(nGType,ORA_GTYPE_COLLECTION) )        poCollection = new OGRGeometryCollection();    else if( ORA_GTYPE_MATCH(nGType,ORA_GTYPE_MULTIPOINT) )        poCollection = new OGRMultiPoint();    else if( ORA_GTYPE_MATCH(nGType,ORA_GTYPE_MULTILINESTRING) )        poCollection = new OGRMultiLineString();    else if( ORA_GTYPE_MATCH(nGType,ORA_GTYPE_MULTIPOLYGON) )        poCollection = new OGRMultiPolygon();/* ==================================================================== *//*      Loop over the component elements.                               *//* ==================================================================== */    ub4   nNextStartOrdinal = 1;    for( int iElement = 0; iElement < nElemCount; iElement += 3 )    {        boolean bExists;        OCINumber *hNumber;        ub4       nInterpretation, nEType;        int       nStartOrdinal = nNextStartOrdinal;/* -------------------------------------------------------------------- *//*      Get the details about element from the elem_info array.         *//* -------------------------------------------------------------------- */        OCICollGetElem(poSession->hEnv, poSession->hError,                        (OCIColl *)(hLastGeom->sdo_elem_info),                        (sb4)(iElement+1), (boolean *)&bExists,                        (dvoid **)&hNumber, NULL );        OCINumberToInt(poSession->hError, hNumber, (uword)sizeof(ub4),                        OCI_NUMBER_UNSIGNED, (dvoid *) &nEType );

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人亚洲综合a∨婷婷图片| 国产精品盗摄一区二区三区| 亚洲综合精品自拍| aaa亚洲精品| 亚洲丝袜自拍清纯另类| 91免费视频网| 亚洲国产日韩在线一区模特| 欧美人牲a欧美精品| 日本欧美在线观看| 精品国产乱码久久久久久1区2区| 国产在线视频精品一区| 综合激情成人伊人| 欧美在线啊v一区| 日本亚洲一区二区| 久久久精品国产99久久精品芒果| 99久久婷婷国产| 亚洲成人动漫一区| 久久综合久久综合亚洲| 成人免费看的视频| 亚洲综合av网| 精品国产123| 99re这里都是精品| 天天综合色天天| 久久精品欧美日韩| 色网站国产精品| 奇米精品一区二区三区在线观看| 久久久午夜精品| 欧美色电影在线| 国产馆精品极品| 性做久久久久久| 国产女同性恋一区二区| 欧美三级日韩三级国产三级| 国产一区二区三区日韩 | 国产成人av资源| 樱花影视一区二区| 欧美不卡在线视频| 日本丶国产丶欧美色综合| 日本vs亚洲vs韩国一区三区| 国产精品人人做人人爽人人添| 日本韩国欧美在线| 国产一区二三区好的| 亚洲成人一二三| 国产日韩欧美一区二区三区综合| 欧美日韩一二三区| 国产成人精品免费网站| 青青青爽久久午夜综合久久午夜| 中文字幕一区av| 久久品道一品道久久精品| 日本韩国一区二区| 成人免费视频一区| 久久精品久久精品| 亚洲综合精品久久| 国产精品久久毛片a| 精品对白一区国产伦| 7777精品伊人久久久大香线蕉的| 成人三级在线视频| 国产精品18久久久久久vr| 日韩中文字幕区一区有砖一区 | 亚洲午夜私人影院| 国产女主播一区| 欧美精品一区二区三区高清aⅴ | 男女男精品视频网| 亚洲图片欧美综合| 亚洲女子a中天字幕| 国产欧美一区二区在线观看| 日韩免费性生活视频播放| 精品视频一区二区三区免费| 99re这里都是精品| aaa国产一区| 成人黄色在线看| 国产精品一色哟哟哟| 麻豆免费精品视频| 日韩精品视频网站| 日日夜夜免费精品| 热久久免费视频| 天堂在线一区二区| 日本强好片久久久久久aaa| 亚洲6080在线| 日韩电影一区二区三区| 日韩精品一卡二卡三卡四卡无卡| 亚洲成人动漫在线观看| 亚洲不卡av一区二区三区| 五月激情综合网| 日韩一区精品视频| 青青青伊人色综合久久| 紧缚捆绑精品一区二区| 久久99久久精品| 国产在线视频一区二区| 国产成人免费视频网站| 成人福利在线看| 91免费在线视频观看| 色婷婷久久99综合精品jk白丝| 在线观看日韩av先锋影音电影院| 欧美在线观看视频一区二区| 色88888久久久久久影院野外 | 五月天网站亚洲| 日本不卡中文字幕| 久久97超碰国产精品超碰| 国产一区二区在线观看免费| 国产成人精品综合在线观看| 99久久久精品| 欧美精品一二三区| 欧美mv日韩mv亚洲| 国产精品视频观看| 亚洲另类一区二区| 亚洲一区视频在线观看视频| 美女一区二区视频| 国内久久婷婷综合| jiyouzz国产精品久久| 欧美色综合影院| 欧美大片日本大片免费观看| 国产日本欧美一区二区| 亚洲国产sm捆绑调教视频 | 欧美曰成人黄网| 精品奇米国产一区二区三区| 亚洲视频网在线直播| 日韩精品亚洲专区| 99久久99久久久精品齐齐| 欧美疯狂性受xxxxx喷水图片| 久久综合狠狠综合久久综合88| 中文字幕一区二区三区在线播放| 午夜在线电影亚洲一区| 国产一区91精品张津瑜| 欧美少妇xxx| 国产精品久久久久久一区二区三区 | 欧洲人成人精品| 精品国产青草久久久久福利| 亚洲三级电影全部在线观看高清| 日本在线播放一区二区三区| 国产91精品精华液一区二区三区| 欧美精品免费视频| 国产精品色呦呦| 免费成人av资源网| 欧美亚洲日本国产| 国产亚洲成年网址在线观看| 亚洲成人精品影院| av电影在线观看不卡| 日韩视频免费观看高清完整版| 国产精品电影院| 久久爱www久久做| 欧美精品一级二级| 亚洲人成精品久久久久| 国产中文一区二区三区| 91麻豆精品国产91久久久使用方法 | 日本成人在线一区| 欧美在线视频全部完| 中文字幕在线一区免费| 精品亚洲国产成人av制服丝袜| 欧美日韩三级一区| 亚洲欧洲综合另类| 国产成a人无v码亚洲福利| 欧美成人一区二区三区片免费 | 国产真实乱子伦精品视频| 欧美电影一区二区| 亚洲乱码国产乱码精品精的特点| 国产成人一级电影| 精品日本一线二线三线不卡| 丝袜美腿亚洲一区| 欧美在线影院一区二区| 最新久久zyz资源站| 国产一区二区三区在线观看免费 | 欧美日韩中文字幕一区二区| 最新久久zyz资源站| www.色精品| 国产精品久久看| 99国产麻豆精品| 亚洲精品成人少妇| 欧美视频在线一区二区三区| 一级女性全黄久久生活片免费| 一本到不卡精品视频在线观看| 国产精品久久久久久久岛一牛影视 | 亚洲人成电影网站色mp4| www..com久久爱| 亚洲同性gay激情无套| 99re这里都是精品| 亚洲一区二区综合| 91精品国模一区二区三区| 毛片基地黄久久久久久天堂| 欧美成人三级电影在线| 国内精品写真在线观看| 国产欧美中文在线| 一道本成人在线| 香蕉av福利精品导航| 欧美成人video| 成人av在线资源网| 一区二区三区高清在线| 91精品国产欧美一区二区| 国内精品不卡在线| 一色桃子久久精品亚洲| 欧美在线观看视频在线| 麻豆成人91精品二区三区| 久久美女高清视频| 97久久超碰国产精品| 五月婷婷激情综合| 久久伊人蜜桃av一区二区| eeuss鲁片一区二区三区在线看| 亚洲免费在线观看| 欧美一区国产二区| 国产一区二区三区在线观看免费视频| 久久精品亚洲乱码伦伦中文|