#include "main.h"#include "ogrsf_frmts.h"#include "ogr_p.h"#include "cpl_conv.h"#include "cpl_string.h"#include "ogr_api.h"#include "gdal.h"static int TranslateLayer(OGRLayer *poPassedLayer,OGRDataSource *ODS,char *pszNewLayerName,int eGType);int main( ){ const char *pszFormat = "ESRI Shapefile"; const char *pszDataSource ="india_ds.shp"; const char *pszDestDataSource = "out.shp"; char *pszNewLayerName=NULL; OGRLayer *poLayer; OGRDataSource *poDS; OGRDataSource *poODS=NULL; const char *pszDriverName = "ESRI Shapefile"; OGRSFDriver *poDriver; OGRRegisterAll(); poDriver = OGRSFDriverRegistrar::GetRegistrar()->GetDriverByName( pszDriverName ); if( poDriver == NULL ) { printf( "%s driver not available.\n", pszDriverName ); exit( 1 ); } poODS = poDriver->*CreateDataSource*( "out.shp", NULL ); if( poODS == NULL ) { printf( "Creation of output file failed.\n" ); exit( 1 ); } poDS = poDriver->*Open*( "india_ds.shp" ); poLayer=poDS->*GetLayerByName*("india_ds"); if( poDS == NULL ) { printf( "Open failed.\n" ); exit( 1 ); } int nLayerCount; OGRLayer** papoLayers = NULL; nLayerCount = poDS->*GetLayerCount*(); printf("\n %d",nLayerCount); papoLayers = (OGRLayer**)CPLMalloc(sizeof(OGRLayer*) * nLayerCount); for( int iLayer = 0; iLayer < nLayerCount; iLayer++ ) { poLayer = poDS->*GetLayer*(iLayer); papoLayers[iLayer] = poLayer; } pszNewLayerName = CPLStrdup(CPLGetBasename(pszDestDataSource)); printf("%s",pszNewLayerName); printf("\n %d",poLayer->*GetFeatureCount*()); int eGType=5; for( int iLayer = 0; iLayer < nLayerCount; iLayer++ ) { OGRLayer *poLayer = papoLayers[iLayer]; if (poLayer == NULL) continue; OGRLayer* poPassedLayer = poLayer; if( !TranslateLayer( poPassedLayer, poODS,pszNewLayerName, eGType)); { exit(1); } } return 0;}static int TranslateLayer(OGRLayer *poSrcLayer,OGRDataSource *poDstDS,char *pszNewLayerName,int eGType) { OGRLayer *poDstLayer; OGRFeatureDefn *poSrcFDefn; OGRFeatureDefn *poDstFDefn = NULL; OGRSpatialReference *poOutputSRS; poSrcFDefn = poSrcLayer->*GetLayerDefn*(); poOutputSRS = poSrcLayer->*GetSpatialRef*(); poDstLayer = poDstDS->*GetLayerByName*(pszNewLayerName); poDstLayer = poDstDS->*CreateLayer*( pszNewLayerName, poOutputSRS, (OGRwkbGeometryType) eGType); poDstLayer->*SetStyleTable*( poSrcLayer->*GetStyleTable* () ); int nSrcFieldCount = poSrcFDefn->GetFieldCount(); printf("%d",nSrcFieldCount ); poDstFDefn = poDstLayer->*GetLayerDefn*(); OGRFeature *poFeature; printf("\n 2 %d",poSrcLayer->*GetFeatureCount*()); OGRFeature *poDstFeature = NULL; poSrcLayer->*ResetReading*(); while((poFeature = poSrcLayer->*GetNextFeature*()) != NULL) { poFeature = poSrcLayer->*GetNextFeature*(); OGRGeometry* poSrcGeometry = poFeature->GetGeometryRef(); poDstFeature = OGRFeature::CreateFeature( poDstLayer->*GetLayerDefn*() ); poDstFeature->*SetFID*( poFeature->GetFID() ); OGRGeometry* poDstGeometry = poDstFeature->GetGeometryRef(); poDstFeature->SetGeometry(poSrcGeometry); } return 0;}
_______________________________________________ gdal-dev mailing list gdal-dev@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/gdal-dev