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

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