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

通过GDAL来处理矢量数据,相信大家已经很了解,如有不了解的,可以通过访问李民录的博文《GDAL读写矢量文件——Python》网址:http://blog.csdn.net/liminlu0314/article/details/8828983,也可以通过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 

 

希望有所帮助

 

转载自:https://blog.csdn.net/zhangwei_zone/article/details/10281061

You may also like...