GDAL 矢量屬性數據修改(python)

Case:需要給一個現有的shp數據創建一個字段,並將屬性表中原有的一個文本類型的屬性轉換爲整型後填入新創建的字段。

Problem:新字段創建成功,但是賦值操作無效,即無法成功給字段寫入值。

solution:對字段進行賦值後需要,重新寫入Feature,否則賦值無效,即layer.SetFeature(feature)

特別注意:在對數據進行讀寫操作,一定要以讀寫的方式打開,即Open(filePath,1),該方法的原型爲Open(pszName,int bUpdate = false),並且具有返回值,參數說明如下:


名稱    說明
pszName    需要打開文件或數據源的路徑
bUpdate    是否需要更新數據集,默認爲只讀,如果需要對數據進行讀寫操作,需要給此參數賦值1
返回值    返回數據集的指針,如果爲NULL,則表明打開數據集失敗
以下將給出創建字段和獲取字段值、子段賦值的實例。

1.爲矢量數據創建字段

    # 添加字段
    defn = layer.GetLayerDefn()
    fieldIndex=defn.GetFieldIndex('SSSS')
    if fieldIndex<0:
        # 添加字段
        fieldDefn = ogr.FieldDefn('SSSS', ogr.OFTInteger)
        fieldDefn.SetPrecision(9)
        layer0.CreateField(fieldDefn,1);
    fieldIndex2 = defn.GetFieldIndex('SSSS')
    if fieldIndex2>0:
        print("字段創建成功:",fieldIndex)


2.獲取字段值及字段賦值

    indexA = defn.GetFieldIndex('code')
    indexB = defn.GetFieldIndex('SSSS')
    oField = defn.GetFieldDefn(indexB)
    fieldName = oField.GetNameRef()
    for feature in layer:
        valueA= feature.GetFieldAsInteger(indexA)
        if valueA is None:
            feature.SetFieldNull(indexB)
            continue
        feature.SetField2(fieldName, valueA)
        layer.SetFeature(feature)       
        feature = None
    ds.Destroy()

————————————————
版權聲明:本文爲CSDN博主「Martian.Alien」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/feixiegis/article/details/80319568

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