?? ogravclayer.cpp
字號:
/****************************************************************************** * $Id: ogravclayer.cpp 10646 2007-01-18 02:38:10Z warmerdam $ * * Project: OGR * Purpose: Implements OGRAVCLayer class. This is the base class for E00 * and binary coverage layer implementations. It provides some base * layer operations, and methods for transforming between OGR * features, and the in memory structures of the AVC library. * 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_avc.h"#include "cpl_conv.h"#include "cpl_string.h"CPL_CVSID("$Id: ogravclayer.cpp 10646 2007-01-18 02:38:10Z warmerdam $");/************************************************************************//* OGRAVCLayer() *//************************************************************************/OGRAVCLayer::OGRAVCLayer( AVCFileType eSectionTypeIn, OGRAVCDataSource *poDSIn ){ eSectionType = eSectionTypeIn; poFeatureDefn = NULL; poDS = poDSIn;}/************************************************************************//* ~OGRAVCLayer() *//************************************************************************/OGRAVCLayer::~OGRAVCLayer(){ if( m_nFeaturesRead > 0 && poFeatureDefn != NULL ) { CPLDebug( "AVC", "%d features read on layer '%s'.", (int) m_nFeaturesRead, poFeatureDefn->GetName() ); } if( poFeatureDefn != NULL ) poFeatureDefn->Release();}/************************************************************************//* TestCapability() *//************************************************************************/int OGRAVCLayer::TestCapability( const char * pszCap ){ return FALSE;}/************************************************************************//* GetSpatialRef() *//************************************************************************/OGRSpatialReference *OGRAVCLayer::GetSpatialRef(){ return poDS->GetSpatialRef();}/************************************************************************//* SetupFeatureDefinition() *//************************************************************************/int OGRAVCLayer::SetupFeatureDefinition( const char *pszName ){ switch( eSectionType ) { case AVCFileARC: { poFeatureDefn = new OGRFeatureDefn( pszName ); poFeatureDefn->Reference(); poFeatureDefn->SetGeomType( wkbLineString ); OGRFieldDefn oUserId( "UserId", OFTInteger ); OGRFieldDefn oFNode( "FNODE_", OFTInteger ); OGRFieldDefn oTNode( "TNODE_", OFTInteger ); OGRFieldDefn oLPoly( "LPOLY_", OFTInteger ); OGRFieldDefn oRPoly( "RPOLY_", OFTInteger ); poFeatureDefn->AddFieldDefn( &oUserId ); poFeatureDefn->AddFieldDefn( &oFNode ); poFeatureDefn->AddFieldDefn( &oTNode ); poFeatureDefn->AddFieldDefn( &oLPoly ); poFeatureDefn->AddFieldDefn( &oRPoly ); } return TRUE; case AVCFilePAL: case AVCFileRPL: { poFeatureDefn = new OGRFeatureDefn( pszName ); poFeatureDefn->Reference(); poFeatureDefn->SetGeomType( wkbPolygon ); OGRFieldDefn oArcIds( "ArcIds", OFTIntegerList ); poFeatureDefn->AddFieldDefn( &oArcIds ); } return TRUE; case AVCFileCNT: { poFeatureDefn = new OGRFeatureDefn( pszName ); poFeatureDefn->Reference(); poFeatureDefn->SetGeomType( wkbPoint ); OGRFieldDefn oLabelIds( "LabelIds", OFTIntegerList ); poFeatureDefn->AddFieldDefn( &oLabelIds ); } return TRUE; case AVCFileLAB: { poFeatureDefn = new OGRFeatureDefn( pszName ); poFeatureDefn->Reference(); poFeatureDefn->SetGeomType( wkbPoint ); OGRFieldDefn oValueId( "ValueId", OFTInteger ); poFeatureDefn->AddFieldDefn( &oValueId ); OGRFieldDefn oPolyId( "PolyId", OFTInteger ); poFeatureDefn->AddFieldDefn( &oPolyId ); } return TRUE; case AVCFileTXT: case AVCFileTX6: { poFeatureDefn = new OGRFeatureDefn( pszName ); poFeatureDefn->Reference(); poFeatureDefn->SetGeomType( wkbPoint ); OGRFieldDefn oUserId( "UserId", OFTInteger ); poFeatureDefn->AddFieldDefn( &oUserId ); OGRFieldDefn oText( "Text", OFTString ); poFeatureDefn->AddFieldDefn( &oText ); OGRFieldDefn oHeight( "Height", OFTReal ); poFeatureDefn->AddFieldDefn( &oHeight ); OGRFieldDefn oLevel( "Level", OFTInteger ); poFeatureDefn->AddFieldDefn( &oLevel ); } return TRUE; default: poFeatureDefn = NULL; return FALSE; }}/************************************************************************//* TranslateFeature() *//* *//* Translate the AVC structure for a feature to the the *//* corresponding OGR definition. It is assumed that the passed *//* in feature is of a type matching the section type *//* established by SetupFeatureDefinition(). *//************************************************************************/OGRFeature *OGRAVCLayer::TranslateFeature( void *pAVCFeature ){ m_nFeaturesRead++; switch( eSectionType ) {/* ==================================================================== *//* ARC *//* ==================================================================== */ case AVCFileARC: { AVCArc *psArc = (AVCArc *) pAVCFeature;/* -------------------------------------------------------------------- *//* Create feature. *//* -------------------------------------------------------------------- */ OGRFeature *poOGRFeature = new OGRFeature( GetLayerDefn() ); poOGRFeature->SetFID( psArc->nArcId );/* -------------------------------------------------------------------- *//* Apply the line geometry. *//* -------------------------------------------------------------------- */ OGRLineString *poLine = new OGRLineString(); poLine->setNumPoints( psArc->numVertices ); for( int iVert = 0; iVert < psArc->numVertices; iVert++ ) poLine->setPoint( iVert, psArc->pasVertices[iVert].x, psArc->pasVertices[iVert].y ); poOGRFeature->SetGeometryDirectly( poLine );/* -------------------------------------------------------------------- *//* Apply attributes. *//* -------------------------------------------------------------------- */ poOGRFeature->SetField( 0, psArc->nUserId ); poOGRFeature->SetField( 1, psArc->nFNode ); poOGRFeature->SetField( 2, psArc->nTNode ); poOGRFeature->SetField( 3, psArc->nLPoly ); poOGRFeature->SetField( 4, psArc->nRPoly ); return poOGRFeature; }/* ==================================================================== *//* PAL (Polygon) *//* RPL (Region) *//* ==================================================================== */ case AVCFilePAL: case AVCFileRPL: { AVCPal *psPAL = (AVCPal *) pAVCFeature;/* -------------------------------------------------------------------- *//* Create feature. *//* -------------------------------------------------------------------- */ OGRFeature *poOGRFeature = new OGRFeature( GetLayerDefn() ); poOGRFeature->SetFID( psPAL->nPolyId );/* -------------------------------------------------------------------- *//* Apply attributes. *//* -------------------------------------------------------------------- */ // Setup ArcId list. int *panArcs, i; panArcs = (int *) CPLMalloc(sizeof(int) * psPAL->numArcs ); for( i = 0; i < psPAL->numArcs; i++ ) panArcs[i] = psPAL->pasArcs[i].nArcId; poOGRFeature->SetField( 0, psPAL->numArcs, panArcs ); CPLFree( panArcs ); return poOGRFeature; }/* ==================================================================== *//* CNT (Centroid) *//* ==================================================================== */ case AVCFileCNT: { AVCCnt *psCNT = (AVCCnt *) pAVCFeature;/* -------------------------------------------------------------------- *//* Create feature. *//* -------------------------------------------------------------------- */ OGRFeature *poOGRFeature = new OGRFeature( GetLayerDefn() ); poOGRFeature->SetFID( psCNT->nPolyId );/* -------------------------------------------------------------------- *//* Apply Geometry *//* -------------------------------------------------------------------- */ poOGRFeature->SetGeometryDirectly( new OGRPoint( psCNT->sCoord.x, psCNT->sCoord.y ) );/* -------------------------------------------------------------------- *//* Apply attributes. *//* -------------------------------------------------------------------- */ poOGRFeature->SetField( 0, psCNT->numLabels, psCNT->panLabelIds ); return poOGRFeature; }/* ==================================================================== *//* LAB (Label) *//* ==================================================================== */ case AVCFileLAB: { AVCLab *psLAB = (AVCLab *) pAVCFeature;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -