天天看点

Shapefile属性操作之改

文章目录

  • ​​开篇​​
  • ​​案例介绍​​
  • ​​代码展示​​
  • ​​方法总结​​

作者:阿振

开篇

在上篇的《​​Shapfile属性操作之增​​​》和《​​Shapefile属性操作之删​​》中我们分别介绍了对于空间矢量数据属性的增加(CREATE)和删除(DELETE)操作,这篇我们聊聊数据的更新操作(UPDATE)。

案例介绍

这里我们要处理的数据是中国地图分省的矢量Shapefile,是一个面状数据。该数据有一个​

​NAME​

​​字段,给出了每个省的名称。这里我们要更新​

​NAME​

​字段,给直辖市名称后面添加“市”字,给自治区后面添加“自治区”字样,给特别行政区后面添加“特别行政区”字样,剩下的省名称后面添加“省”字。

代码展示

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      

方法总结

  1. 首先,我们使用​

    ​ogr.Open()​

    ​​函数打开Shapefile数据,注意我们要设置​

    ​update​

    ​​参数为​

    ​True​

    ​,即允许GDAL更新我们的原始数据。
  2. 使用​

    ​GetLayer()​

    ​​方法获取图层,然后使用for循环遍历图层中的要素。通过​

    ​GetField()​

    ​​方法获取需要修改的字段,然后通过​

    ​SetField()​

    ​方法修改字段。
  3. 记得添加完属性值以后,需要使用​

    ​SetFeature()​

    ​​方法将当前​

    ​feature​

    ​​更新到涂层​

    ​layer​

    ​中去。