Shapefile属性操作之删

网友投稿 552 2022-11-12

Shapefile属性操作之删

Shapefile属性操作之删

文章目录

​​开篇​​​​案例介绍​​​​代码展示​​​​方法总结​​作者:阿振

开篇

延续上篇的《​​Shapfile属性操作之增​​》,这篇我们来聊聊如何进行属性删除。使用的工具依旧是我们的GDAL库。

案例介绍

这里我们要处理的数据是中国地图分省的矢量Shapefile,是一个面状数据。在上篇中我们给该数据添加了一个属性字段​​Abbr​​用以表示省的简称。这篇我们再把该字段给删除掉。

删除的方法包括两部:首先,从属性表中找到该字段,然后删除该字段。

代码展示

Talk is cheap. Show me the code.

from osgeo import ogrogr.UseExceptions()# 从给定图层中读取字段的定义,根据给定字段名称找到该字段的索引编号def get_field_index_by_name(layer: ogr.Layer, name: str): defs: ogr.FeatureDefn = layer.GetLayerDefn() for i in range(defs.GetFieldCount()): if name == defs.GetFieldDefn(i).GetName(): return i raise ValueError(f'{name} not found')# 打开一个Shapefile文件ds: ogr.DataSource = ogr.Open('../data/省级行政区.shp', update=True)layer: ogr.Layer = ds.GetLayer()# 删除Abbr字段index = get_field_index_by_name(layer, 'Abbr_1')layer.DeleteField(index)ds = None

方法总结

GDAL的图层​​ogr.Layer​​​类提供了​​DeleteField()​​方法用于删除字段,但是该方法传入的参数必须是要删除字段的索引编号。我们一般的业务需求是根据字段名称去进行删除操作,所以我自定义了一个​​get_field_index_by_name()​​​函数用于从给定图层中查找给定字段名称对应的索引编号。该函数接受两个参数,第一个是图层变量,第二个是字段名称。该函数实现的逻辑是遍历传入的图层中的字段的定义,找到和给定名称相同的字段并返回其索引。有一种特殊情况是传入的字段名称在当前图层中并不存在,对于这种情况,我们直接抛出一个​​ValueError​​错误。这样我们就可以采用​​layer​​​的​​DeleteField()​​方法进行删除了。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:基于slf4j日志MDC输出格式的问题
下一篇:Openlayers示例5 | ArcGIS REST Feature Service(未成功)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~