Shapefile屬性操作之改


版權聲明:本文爲博主原創文章,轉載請註明原文出處!

作者:阿振

寫作時間:2020-06-13


開篇

在上篇的《Shapfile屬性操作之增》和《Shapefile屬性操作之刪》中我們分別介紹了對於空間矢量數據屬性的增加(CREATE)和刪除(DELETE)操作,這篇我們聊聊數據的更新操作(UPDATE)。

案例介紹

這裏我們要處理的數據是中國地圖分省的矢量Shapefile,是一個面狀數據。該數據有一個NAME字段,給出了每個省的名稱。這裏我們要更新NAME字段,給直轄市名稱後面添加“市”字,給自治區後面添加“自治區”字樣,給特別行政區後面添加“特別行政區”字樣,剩下的省名稱後面添加“省”字。

思路是我們遍歷圖層中的每一個Feature要素,然後通過ogr.FeatureSetField()方法更新屬性值。

代碼展示

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

方法總結

  1. 首先,我們使用ogr.Open()函數打開Shapefile數據,注意我們要設置update參數爲True,即允許GDAL更新我們的原始數據。
  2. 使用GetLayer()方法獲取圖層,然後使用for循環遍歷圖層中的要素。通過GetField()方法獲取需要修改的字段,然後通過SetField()方法修改字段。
  3. 記得添加完屬性值以後,需要使用SetFeature()方法將當前feature更新到塗層layer中去。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章