OGR中删除shapefile中feature的方法

 

这个问题想起来可能很简单,但实际或许很简单,可是我还是花费了三天的功夫才知道该怎么做,现在记录一下。(只做了两次实验,不敢确定完全正确,只是提供一种思路罢)。

如果查看过GDAL/OGR网站的话,我们会发现,OGR有一个方法名字就叫layer.deletefeature(unit FID),看起来好像就是用来删除feature的,如果真的是这样就好了,可惜不是。Layer.deletefeature(unit FID)是将FID为某个值的feature在DBF中标记为deleted,但实际上它并未将该feature真正删除。

那么,肯定会有实现的办法,于是乎查看GDAL网站上的各种有点关系的方法,结果越看越懵。将要放弃的时候看到了GDAL的mailing list,“抱着试试看的态度”,我进去搜了一下,结果,哎,效果还不错,有人提问过类似问题,而且有答案。正在此时,给GDAL的Frank的Email也回复了(老外还是挺厚道的),提供的方法与mailing list 一样(好像都是他给回答的吧,忘了)。

那就是:在用了layer.deletefeature()之后,再利用REPACK命令,这将忽略已经标记为deleted的feature。我的语句是这样的:

                   ogrds = driver.Open(@"XianCh_point.shp", 1);

                   Layer ogrlayer = ogrds.GetLayerByName("XianCh_point");

                   int int_min_index=Convert.ToInt32(min_index);//要删除的featureFID

                   ogrlayer.DeleteFeature(int_min_index );

                   ogrds.ExecuteSQL("REPACK XianCh_point", null, "");  

                    ogrds.Dispose();

       方法我还没有更多的去测试,可能有问题,等测试后再看效果。

    希望对需要的朋友能有所帮助。

转载于:https://www.cnblogs.com/gisbingxin/archive/2009/12/07/1618314.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值