您的位置:首页 > 其它

GDAL修改shp矢量数据的属性值

2013-08-24 18:37 696 查看
通过GDAL来处理矢量数据,相信大家已经很了解,如有不了解的,可以通过访问李民录的博文《GDAL读写矢量文件——Python》网址:/article/1360937.html,也可以通过OGR的官方网站中的进行教程学习http://www.gdal.org/ogr/ogr_apitut.html。但大家看了之后大多数是读shp文件,创建新的shp文件,添加要素等等。这里我想讲一下关于如何修改已存在的shp文件。

我们跳过怎么打开数据集,获取图层,要素等步骤,直接进入主题:如何在添加一个新的属性列,并且在这个列里面输入你想要输进所数据。

假设获取的数据集名为vector_ds,其图层名为oLayer,那么创建新的属性是需要利用层这一个类中的CreateField()函数。创建一个属性需要用到ogr中的属性FieldDefn(var1,var2),其中第一个参数是你要创建属性日名称,第二个参数是该属性的类型(常用的有ogr.OFTinteger,ogr.OFTReal,ogr.OFTString,分别是整形,浮点型,字符型),然后可以通过创建的这个属性设置相应的内容,比如如果你设置成了字符型 的,你需要设置字符的宽度 函数为SetWidth(100),创建完毕后,需要用此层创建之,oLayer.CreaterField(oNewField).给出例子:创建一个为双精度的属性字段:

oNewField = ogr.FieldDefn("NewField",ogr.OFTReal)
#设置精度
oNewField.SetPrecision(8)
oLayer.CreateField(oNewField)


一般这样添加的属性是在属性表的最后一列

下面需要对此属性字段添加你要输入的值

遍历层上的每一个要素,在些属性上加入值,如图所示:



下面给出代码:

for feature in oLayer:
#获取每个要素的属性的个数
NumOfDefn = feature.GetFieldCount()
    #要输入的值,注:需要和前面的设置的类型一样,否则会报错
    inputData = 100.3
#调用要素下SetField()函数,第一个参数的意思是属性列的编号,最后一列编号为NumOfDefn - 1,依次类推,第二就是要输入的值
feature.SetField(NumOfDefn-1,inputData)
#别忘记了,还要重新加载一次,不然不会有结果
oLayer.SetFeature(feature)
inputData = inputData + 0.1
#如果操作完成 关闭数据集
vector_ds = None


希望有所帮助
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: