[gdal-dev] copy features to empty shp file: extent problem

Peter J Halls P.Halls at york.ac.uk
Thu Jan 27 04:16:21 EST 2011


Emmiolla,

    the problem is that OGR does not rewrite the extents when updating a 
dataset; it only calculates and writes the extents when creating a new dataset. 
  This is documented behaviour.  You are creating the dataset in ArcCatalog and 
then updating it with OGR, hence your problem.

    Is there any reason why you cannot create the dataset from OGR?  I do this 
regularly and have never had problems with ArcGIS reading this output.  It would 
require a few extra lines of code to define the attribute data, but these are 
very straightforward.

Best wishes,

Peter

Emmiolla Emmiolla wrote:
> Hello, all!
> 
> I need to copy features to the empty shp file.
> 
> The code is really simple:
> 
>     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 );
>     }
> 
>     OGRDataSource       *poDS;
>     poDS = OGRSFDriverRegistrar::Open(
> "C:\\ArcProjects\\Untamo\\Test\\test.shp", TRUE );
>     if( poDS == NULL )
>     {
>         printf( "Open failed.\n" );
>         exit( 1 );
>     }
> 
>         OGRLayer  *poLayer;
>     poLayer = poDS->GetLayerByName( "test" );
> 
> 
>         OGRDataSource       *poDS1;
>     poDS1 = OGRSFDriverRegistrar::Open(
> "C:\\ArcProjects\\Untamo\\Test\\arbukle0ot.shp", FALSE );
>     if( poDS1 == NULL )
>     {
>         printf( "Open failed.\n" );
>         exit( 1 );
>     }
> 
>         OGRLayer  *featuresLayer;
>     featuresLayer = poDS1->GetLayerByName( "arbukle0ot" );
> 
>     OGRFeature *poFeature;
>     featuresLayer->ResetReading();
>     while( (poFeature = featuresLayer->GetNextFeature()) != NULL )
>     {
> 
>         OGRFeature *newFeature;
> 
>         newFeature = OGRFeature::CreateFeature( poLayer->GetLayerDefn() );
>         newFeature->SetField( "ID", 1);
>                 newFeature->SetGeometry(poFeature->GetGeometryRef());
> 
>         if( poLayer->CreateFeature(newFeature ) != OGRERR_NONE )
>         {
>            printf( "Failed to create feature in shapefile.\n" );
>            exit( 1 );
>         }
> 
>                  OGRFeature::DestroyFeature( newFeature );
>          OGRFeature::DestroyFeature( poFeature );
>     }
> 
>         OGRDataSource::DestroyDataSource( poDS );
>         OGRDataSource::DestroyDataSource( poDS1 );
> }
> 
> arbukle0ot.shp contains features,
> test is empty shp file, that is created with ArcCatalog.
> 
> Now if you run this code, features will be copied, however the extent of the
> shp file will be strange, as the MinX and MinY will be 0 and 0. (however it
> should not be, the extent of each feature differs from zero)
> 
> The most interesting thing, that if you will take this test.shp, draw some
> features in ArcMap, check extent (it will be the right one), than delete
> this features to make shp file again empty, and run the code, the extent of
> the output file be the correct!
> 
> I wonder, what is a problem?
> 
> emmiolla
> 
> 
> 
> ------------------------------------------------------------------------
> 
> _______________________________________________
> gdal-dev mailing list
> gdal-dev at lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/gdal-dev

-- 
--------------------------------------------------------------------------------
Peter J Halls, GIS Advisor & Acting Team Leader Applications Support Group,
                Information Directorate, University of York
Telephone: 01904 323806     Fax: 01904 323740
Snail mail: C/O IT Services, University of York, Heslington, York YO10 5DD
This message has the status of a private and personal communication
--------------------------------------------------------------------------------


More information about the gdal-dev mailing list