GDAL 矢量属性数据修改(python)

3 篇文章 0 订阅
3 篇文章 0 订阅

Case:需要给一个现有的shp数据创建一个字段,并将属性表中原有的一个文本类型的属性转换为整型后填入新创建的字段。

Problem:新字段创建成功,但是赋值操作无效,即无法成功给字段写入值。

solution:对字段进行赋值后需要,重新写入Feature,否则赋值无效,即layer0.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.获取字段值及字段赋值

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


  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值