版权声明:本文为博主原创文章,转载请注明原文出处!
作者:阿振
写作时间:2020-06-13
在上篇的《Shapfile属性操作之增》和《Shapefile属性操作之删》中我们分别介绍了对于空间矢量数据属性的增加(CREATE)和删除(DELETE)操作,这篇我们聊聊数据的更新操作(UPDATE)。
这里我们要处理的数据是中国地图分省的矢量Shapefile,是一个面状数据。该数据有一个NAME
字段,给出了每个省的名称。这里我们要更新NAME
字段,给直辖市名称后面添加“市”字,给自治区后面添加“自治区”字样,给特别行政区后面添加“特别行政区”字样,剩下的省名称后面添加“省”字。
思路是我们遍历图层中的每一个Feature要素,然后通过ogr.Feature
的SetField()
方法更新属性值。
Talk is cheap. Show me the code.
from osgeo import ogr
ogr.UseExceptions()
# 打开一个Shapefile
ds: ogr.DataSource = ogr.Open('../data/省级行政区.shp', update=True)
layer: ogr.Layer = ds.GetLayer()
# 填充属性值
for feature in layer:
name: str = feature.GetField('NAME')
if name in ('北京', '天津', '重庆', '上海'):
name += '市'
elif name in ('内蒙古', '广西', '宁夏', '新疆', '西藏'):
name += '自治区'
elif name in ('中国香港', '中国澳门'):
name += '特别行政区'
else:
name += '省'
feature.SetField('NAME', name)
# 修改完了记得Set一下
layer.SetFeature(feature)
# 关闭数据集
ds = None
ogr.Open()
函数打开Shapefile数据,注意我们要设置update
参数为True
,即允许GDAL更新我们的原始数据。GetLayer()
方法获取图层,然后使用for循环遍历图层中的要素。通过GetField()
方法获取需要修改的字段,然后通过SetField()
方法修改字段。SetFeature()
方法将当前feature
更新到涂层layer
中去。