?? ogrdatasource.cpp
字號:
/****************************************************************************** * $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 + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -