[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