ogrdatasource.cpp

来自「支持各种栅格图像和矢量图像读取的库」· C++ 代码 · 共 931 行 · 第 1/3 页

CPP
931
字号
/****************************************************************************** * $Id: ogrdatasource.cpp 10646 2007-01-18 02:38:10Z warmerdam $ * * Project:  OpenGIS Simple Features Reference Implementation * Purpose:  The generic portions of the OGRDataSource class. * Author:   Frank Warmerdam, warmerdam@pobox.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 "ogrsf_frmts.h"#include "ogr_api.h"#include "ogr_p.h"#include "ogr_gensql.h"#include "ogr_attrind.h"CPL_CVSID("$Id: ogrdatasource.cpp 10646 2007-01-18 02:38:10Z warmerdam $");/************************************************************************//*                           ~OGRDataSource()                           *//************************************************************************/OGRDataSource::OGRDataSource(){    m_poStyleTable = NULL;    m_nRefCount = 0;    m_poDriver = NULL;}/************************************************************************//*                           ~OGRDataSource()                           *//************************************************************************/OGRDataSource::~OGRDataSource(){    if ( m_poStyleTable )    {        delete m_poStyleTable;        m_poStyleTable = NULL;    }}/************************************************************************//*                         DestroyDataSource()                          *//************************************************************************/void OGRDataSource::DestroyDataSource( OGRDataSource *poDS ){    delete poDS;}/************************************************************************//*                           OGR_DS_Destroy()                           *//************************************************************************/void OGR_DS_Destroy( OGRDataSourceH hDS ){    delete (OGRDataSource *) hDS;}/************************************************************************//*                              Release()                               *//************************************************************************/OGRErr OGRDataSource::Release(){    return OGRSFDriverRegistrar::GetRegistrar()->ReleaseDataSource( this );}/************************************************************************//*                             Reference()                              *//************************************************************************/int OGRDataSource::Reference(){    return ++m_nRefCount;}/************************************************************************//*                          OGR_DS_Reference()                          *//************************************************************************/int OGR_DS_Reference( OGRDataSourceH hDataSource ){    return ((OGRDataSource *) hDataSource)->Reference();}/************************************************************************//*                            Dereference()                             *//************************************************************************/int OGRDataSource::Dereference(){    return --m_nRefCount;}/************************************************************************//*                         OGR_DS_Dereference()                         *//************************************************************************/int OGR_DS_Dereference( OGRDataSourceH hDataSource ){    return ((OGRDataSource *) hDataSource)->Dereference();}/************************************************************************//*                            GetRefCount()                             *//************************************************************************/int OGRDataSource::GetRefCount() const{    return m_nRefCount;}/************************************************************************//*                         OGR_DS_GetRefCount()                         *//************************************************************************/int OGR_DS_GetRefCount( OGRDataSourceH hDataSource ){    return ((OGRDataSource *) hDataSource)->GetRefCount();}/************************************************************************//*                         GetSummaryRefCount()                         *//************************************************************************/int OGRDataSource::GetSummaryRefCount() const{    int nSummaryCount = m_nRefCount;    int iLayer;    OGRDataSource *poUseThis = (OGRDataSource *) this;    for( iLayer=0; iLayer < poUseThis->GetLayerCount(); iLayer++ )        nSummaryCount += poUseThis->GetLayer( iLayer )->GetRefCount();    return nSummaryCount;}/************************************************************************//*                     OGR_DS_GetSummaryRefCount()                      *//************************************************************************/int OGR_DS_GetSummaryRefCount( OGRDataSourceH hDataSource ){    return ((OGRDataSource *) hDataSource)->GetSummaryRefCount();}/************************************************************************//*                            CreateLayer()                             *//************************************************************************/OGRLayer *OGRDataSource::CreateLayer( const char * pszName,                                      OGRSpatialReference * poSpatialRef,                                      OGRwkbGeometryType eGType,                                      char **papszOptions ){    (void) eGType;    (void) poSpatialRef;    (void) pszName;    (void) papszOptions;    CPLError( CE_Failure, CPLE_NotSupported,              "CreateLayer() not supported by this data source." );                  return NULL;}/************************************************************************//*                         OGR_DS_CreateLayer()                         *//************************************************************************/OGRLayerH OGR_DS_CreateLayer( OGRDataSourceH hDS,                               const char * pszName,                              OGRSpatialReferenceH hSpatialRef,                              OGRwkbGeometryType eType,                              char ** papszOptions ){    return ((OGRDataSource *)hDS)->CreateLayer(         pszName, (OGRSpatialReference *) hSpatialRef, eType, papszOptions );}/************************************************************************//*                             CopyLayer()                              *//************************************************************************/OGRLayer *OGRDataSource::CopyLayer( OGRLayer *poSrcLayer,                                     const char *pszNewName,                                     char **papszOptions ){    OGRFeatureDefn *poSrcDefn = poSrcLayer->GetLayerDefn();    OGRLayer *poDstLayer = NULL;/* -------------------------------------------------------------------- *//*      Create the layer.                                               *//* -------------------------------------------------------------------- */    if( !TestCapability( ODsCCreateLayer ) )    {        CPLError( CE_Failure, CPLE_NotSupported,                   "This datasource does not support creation of layers." );        return NULL;    }    CPLErrorReset();    poDstLayer = CreateLayer( pszNewName, poSrcLayer->GetSpatialRef(),                              poSrcDefn->GetGeomType(), papszOptions );        if( poDstLayer == NULL )        return NULL;/* -------------------------------------------------------------------- *//*      Add fields.  Default to copy all field.                         *//*      If only a subset of all fields requested, then output only      *//*      the selected fields, and in the order that they were            *//*      selected.                                                       *//* -------------------------------------------------------------------- */    int         iField;        for( iField = 0; iField < poSrcDefn->GetFieldCount(); iField++ )        poDstLayer->CreateField( poSrcDefn->GetFieldDefn(iField) );/* -------------------------------------------------------------------- *//*      Transfer features.                                              *//* -------------------------------------------------------------------- */    OGRFeature  *poFeature;        poSrcLayer->ResetReading();    while( TRUE )    {        OGRFeature      *poDstFeature = NULL;        poFeature = poSrcLayer->GetNextFeature();                if( poFeature == NULL )            break;        CPLErrorReset();        poDstFeature = OGRFeature::CreateFeature( poDstLayer->GetLayerDefn() );        if( poDstFeature->SetFrom( poFeature, TRUE ) != OGRERR_NONE )        {            delete poFeature;            CPLError( CE_Failure, CPLE_AppDefined,                      "Unable to translate feature %d from layer %s.\n",                      poFeature->GetFID(), poSrcDefn->GetName() );            return poDstLayer;        }        poDstFeature->SetFID( poFeature->GetFID() );        OGRFeature::DestroyFeature( poFeature );        CPLErrorReset();        if( poDstLayer->CreateFeature( poDstFeature ) != OGRERR_NONE )        {            OGRFeature::DestroyFeature( poDstFeature );            return poDstLayer;        }        OGRFeature::DestroyFeature( poDstFeature );    }    return poDstLayer;}/************************************************************************//*                          OGR_DS_CopyLayer()                          *//************************************************************************/OGRLayerH OGR_DS_CopyLayer( OGRDataSourceH hDS,                             OGRLayerH hSrcLayer, const char *pszNewName,                            char **papszOptions ){    return ((OGRDataSource *) hDS)->CopyLayer( (OGRLayer *) hSrcLayer, 

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?