⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ogrfmelayer.cpp

📁 GIS系统支持库Geospatial Data Abstraction Library代码.GDAL is a translator library for raster geospatial dat
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/****************************************************************************** * $Id: ogrfmelayer.cpp,v 1.4 2005/02/22 12:57:19 fwarmerdam Exp $ * * Project:  FMEObjects Translator * Purpose:  Implementation of the OGRFMELayer base class.  The class *           implements behaviour shared between database and spatial cached *           layer types. * Author:   Frank Warmerdam, warmerdam@pobox.com * ****************************************************************************** * Copyright (c) 1999, 2001 Safe Software Inc. * All Rights Reserved * * This software may not be copied or reproduced, in all or in part,  * without the prior written consent of Safe Software Inc. * * The entire risk as to the results and performance of the software, * supporting text and other information contained in this file * (collectively called the "Software") is with the user.  Although * Safe Software Incorporated has used considerable efforts in preparing  * the Software, Safe Software Incorporated does not warrant the * accuracy or completeness of the Software. In no event will Safe Software  * Incorporated be liable for damages, including loss of profits or  * consequential damages, arising out of the use of the Software. ****************************************************************************** * * $Log: ogrfmelayer.cpp,v $ * Revision 1.4  2005/02/22 12:57:19  fwarmerdam * use OGRLayer base spatial filter support * * Revision 1.3  2005/02/02 20:54:27  fwarmerdam * track m_nFeaturesRead * * Revision 1.2  2002/10/29 03:28:34  warmerda * fixed 2.5D flag value * * Revision 1.1  2002/05/24 06:23:57  warmerda * New * * Revision 1.13  2002/05/24 06:17:01  warmerda * clean up dependencies on strimp.h, and fme2ogrspatialref func * * Revision 1.12  2002/05/06 14:06:37  warmerda * override coordsys from cached features if needed * * Revision 1.11  2002/04/25 21:29:03  warmerda * removed noisy debug statement * * Revision 1.10  2002/04/10 20:10:46  warmerda * filled out geometry type mappings * * Revision 1.9  2002/04/08 14:26:33  warmerda * add support for harvesting the geometry type from schema * * Revision 1.8  2001/11/26 18:37:34  warmerda * filter out fme_geomattr attributes * * Revision 1.7  2001/11/21 15:45:25  warmerda * allow SRS to be passed in * * Revision 1.6  2001/11/19 22:11:51  warmerda * avoid leaking string, or spatialref * * Revision 1.5  2001/09/07 15:54:14  warmerda * now just a subclass of DB and Cached specific implementations * * Revision 1.4  2001/07/27 17:27:06  warmerda * added CVSID * * Revision 1.3  2001/07/27 17:24:45  warmerda * First phase rewrite for MapGuide * * Revision 1.2  1999/11/23 15:39:51  warmerda * tab expantion * * Revision 1.1  1999/11/23 15:22:58  warmerda * New * * Revision 1.4  1999/11/22 22:10:49  warmerda * added GetSpatialRef(), and fme_real64 support * * Revision 1.3  1999/11/10 14:04:44  warmerda * updated to new fmeobjects kit * * Revision 1.2  1999/09/09 21:05:34  warmerda * further fleshed out * * Revision 1.1  1999/09/09 20:40:56  warmerda * New */#include "fme2ogr.h"#include "cpl_conv.h"#include "cpl_string.h"CPL_CVSID("$Id: ogrfmelayer.cpp,v 1.4 2005/02/22 12:57:19 fwarmerdam Exp $");/************************************************************************//*                            OGRFMELayer()                             *//************************************************************************/OGRFMELayer::OGRFMELayer( OGRFMEDataSource *poDSIn ){    poDS = poDSIn;    poFeatureDefn = NULL;    poSpatialRef = NULL;    pszAttributeFilter = NULL;    poFMEFeature = NULL;}/************************************************************************//*                            ~OGRFMELayer()                            *//************************************************************************/OGRFMELayer::~OGRFMELayer(){    if( m_nFeaturesRead > 0 && poFeatureDefn != NULL )    {        CPLDebug( "FME", "%d features read on layer '%s'.",                  (int) m_nFeaturesRead,                   poFeatureDefn->GetName() );    }    CPLFree( pszAttributeFilter );    if( poFMEFeature != NULL )        poDS->GetFMESession()->destroyFeature( poFMEFeature );    if( poFeatureDefn != NULL )        delete poFeatureDefn;    if( poSpatialRef != NULL )        delete poSpatialRef;}/************************************************************************//*                             Initialize()                             *//*                                                                      *//*      Build an OGRFeatureDefn for this layer from the passed          *//*      schema IFMEFeature.                                             *//************************************************************************/int OGRFMELayer::Initialize( IFMEFeature * poSchemaFeature,                             OGRSpatialReference *poSRS ){    IFMEString  *poFMEString = NULL;        poFMEString = poDS->GetFMESession()->createString();    poFMEFeature = poDS->GetFMESession()->createFeature();    if( poSRS != NULL )        poSpatialRef = poSRS->Clone();/* -------------------------------------------------------------------- *//*      Create the definition with the definition name being the        *//*      same as the FME feature type.                                   *//* -------------------------------------------------------------------- */    poSchemaFeature->getFeatureType( *poFMEString );    poFeatureDefn = new OGRFeatureDefn( poFMEString->data() );    poDS->GetFMESession()->destroyString( poFMEString );/* -------------------------------------------------------------------- *//*      Get the list of attribute names.                                *//* -------------------------------------------------------------------- */    IFMEStringArray     *poAttrNames;    poAttrNames = poDS->GetFMESession()->createStringArray();    poSchemaFeature->getAllAttributeNames( *poAttrNames );/* ==================================================================== *//*      Loop over attributes, adding them to our feature defn.          *//* ==================================================================== */    OGRwkbGeometryType eGeomType = wkbNone;    IFMEString  *poAttrValue;    poAttrValue = poDS->GetFMESession()->createString();        for( int iAttr = 0; iAttr < (int)poAttrNames->entries(); iAttr++ )    {        const char       *pszAttrName = (*poAttrNames)(iAttr);/* -------------------------------------------------------------------- *//*      Get the attribute value.                                        *//* -------------------------------------------------------------------- */        if( !poSchemaFeature->getAttribute(pszAttrName,*poAttrValue) )            continue;/* -------------------------------------------------------------------- *//*      Handle geometry attributes.  Use them to try and establish      *//*      the geometry type of this layer.  If we get conflicting         *//*      geometries just fall back to the generic geometry type.         *//* -------------------------------------------------------------------- */        if( EQUALN(pszAttrName,"fme_geometry",12) )        {            OGRwkbGeometryType eAttrGeomType = wkbNone;            if( EQUAL(poAttrValue->data(),"fme_point") )                eAttrGeomType = wkbPoint;            else if( EQUAL(poAttrValue->data(),"fme_text") )                eAttrGeomType = wkbPoint;            else if( EQUAL(poAttrValue->data(),"fme_area") )                eAttrGeomType = wkbPolygon;            else if( EQUAL(poAttrValue->data(),"fme_polygon") )                eAttrGeomType = wkbPolygon;            else if( EQUAL(poAttrValue->data(),"fme_rectangle") )

⌨️ 快捷键说明

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