前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Shapefile属性操作之改

Shapefile属性操作之改

作者头像
卡尔曼和玻尔兹曼谁曼
发布2020-06-15 10:38:54
9080
发布2020-06-15 10:38:54
举报
文章被收录于专栏:给永远比拿愉快

文章目录

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

版权声明:本文为博主原创文章,转载请注明原文出处!

作者:阿振

写作时间:2020-06-13


开篇

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

案例介绍

这里我们要处理的数据是中国地图分省的矢量Shapefile,是一个面状数据。该数据有一个NAME字段,给出了每个省的名称。这里我们要更新NAME字段,给直辖市名称后面添加“市”字,给自治区后面添加“自治区”字样,给特别行政区后面添加“特别行政区”字样,剩下的省名称后面添加“省”字。

思路是我们遍历图层中的每一个Feature要素,然后通过ogr.FeatureSetField()方法更新属性值。

代码展示

Talk is cheap. Show me the code.

代码语言:javascript
复制
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中去。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/06/13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 开篇
  • 案例介绍
  • 代码展示
  • 方法总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档