版权声明:本文为博主原创文章,转载请注明原文出处!
作者:阿振
写作时间:2020-06-13 又是一个周末
开篇
《Python空间数据处理实战》系列的博文好久都没有更新了,今天乘周末有点时间,补了个觉,然后写几篇博文。
关于Python空间数据处理,如果大家有什么想看到的内容,欢迎评论区留言,我会增加一些大家需要的内容!
今天我打算用四篇博客简要介绍一下如何对空间矢量数据的属性数据进行操作。对于属性数据,我们可以简单将其看作一个二维表格,学过数据库的朋友,可能会想到关系数据库的概念。是的,我们现在的空间矢量数据的属性数据大部分就是以关系表的形式进行存储的。而对于关系数据库的操作,常用的就是增删改查(CRUD,即Create,Retrieve,Update,Delete)操作。
这篇博文单讲Create增加操作,使用的工具还是我们的GDAL库。
案例介绍
我还是喜欢用案例的方式进行知识的讲解。这里我们要处理的数据是中国地图分省的矢量Shapefile,是一个面状数据。该数据有一个NAME
字段,给出了每个省的名称。然后我们需要给给数据增加一个属性字段Abbr
,用以表示每个省的简称。
要完成这项工作,我们首先需要建立一个省份名称到简称的字典,方便程序查询。然后读取原始数据,新建一个属性字段Abbr
,然后遍历数据中的每个Feature要素,取出NAME
,再根据字典查询到当前NAME
对应的Abbr
填充进对应的字段即可。
代码展示
Talk is cheap. Show me the code.
1 | from osgeo import ogr |
方法总结
下面我们来对上面的代码进行一个方法的总结:
- 首先,我们使用
ogr.Open()
函数打开Shapefile数据,注意我们要设置update
参数为True
,即允许GDAL更新我们的原始数据。 - 使用
ogr.FieldDefn()
函数新建一个字段,然后添加到layer
图层中。注意我们这里新建的字段的类型是字符串类型ogr.OFTString
,当然我们还可以新建其他类型的字段,例如整形ogr.OFTInteger
,实数形ogr.OFTReal
,日期型ogr.OFTDate
等。一般对于字符串类型,我们还需要设置字符串的宽度。 - 接下来我们遍历
layer
中的feature
,使用SetField()
方法设置属性值。记得添加完属性值以后,需要使用SetFeature()
方法将当前feature
更新到涂层layer
中去。