[gdal-dev] deleting feature exceptions
Frank Warmerdam
warmerdam at pobox.com
Thu Aug 14 22:06:56 EDT 2008
Chen,
I'm surprised both approaches don't work smoothly. I'd suggest you boil
down a minimum example of the problem, and file a bug ticket on it
including the input data.
Best regards,
FrankW
2008/8/14 wow <27949218 at qq.com>:
>
> Hi,
> i try to delete features from a set of shape file, sometimes get error. I
> use this version of ogrshapelayer.cpp :
> http://trac.osgeo.org/gdal/changeset/10969 . Delete feature in two ways
> would get different result:
> (1) for(iFeat=0;iFeat<nFeat;iFeat++)
> {
> int cplE = pLayer->DeleteFeature(0);
> if(cplE==CE_None)
> {
> OGRShapeLayer* pShpLayer = (OGRShapeLayer*)pLayer;
> cplE = pShpLayer->Repack();
> if(cplE!=CE_None)
> {
> printf("delete feature failed !\n");
> return false;
> }
> }
> }
> int nFeatRest = pLayer->GetFeatureCount();
>
> These codes could delete each feature with returned value CE_None, and
> at the end nFeatRest=0. But when ran to pShpLayer->Repack() second, the
> error occurs: "Failure writing DBF record 0", it jumped untill all features
> were deleted.
>
> (2) for(iFeat=nFeat-1;iFeat>=0;iFeat--)
> {
> int cplE = pLayer->DeleteFeature(iFeat);
> if(cplE==CE_None)
> {
> OGRShapeLayer* pShpLayer = (OGRShapeLayer*)pLayer;
> cplE = pShpLayer->Repack();
> if(cplE!=CE_None)
> {
> printf("delete feature failed !\n");
> return false;
> }
> }
> }
> int nFeatRest = pLayer->GetFeatureCount();
>
> These codes could delete each feature with returned value CE_None, but
> at the end nFeatRest>0 and nFeatRest<nFeat, some features were NOT deleted
> yet! Same as (1), when ran to pShpLayer->Repack() second, the error
> occurs: "Failure writing DBF record iFeat", it jumped untill all features
> were deleted.
> Trace the error "Failure writing DBF record ..." into Repack():
> /* --------------------------------------------------------------------
> */
> /* Build a list of records to be dropped.
> */
> /* --------------------------------------------------------------------
> */
> ...
> for( iShape = 0; iShape < nTotalShapeCount; iShape++ )
> {
> if( DBFIsRecordDeleted( hDBF, iShape ) )//------------ERROR jumped
> ---------
> panRecordsToDelete[nDeleteCount++] = iShape;
> }
> Why did this phenomena occurs?
> Thank you.
>
> ------------------
> To the world you're little, but to a person you're the world.
> Chen Xuexia
> _______________________________________________
> gdal-dev mailing list
> gdal-dev at lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/gdal-dev
>
--
---------------------------------------+--------------------------------------
I set the clouds in motion - turn up | Frank Warmerdam, warmerdam at pobox.com
light and sound - activate the windows | http://pobox.com/~warmerdam
and watch the world go round - Rush | Geospatial Programmer for Rent
More information about the gdal-dev
mailing list