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 

 

希望有所幫助

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章