GDAL 矢量属性数据修改方式矢量属性数据修改方式(python)
主要介绍了GDAL 矢量属性数据修改方式(python),具有很好的参考价值,希望对大家有所帮助。一起跟随小编
过来看看吧
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()
补充知识:补充知识:Python批量修改批量修改shapefile属性表字段名(属性表字段名(arcpy增删字段)增删字段)
尝试了3种方法,时间紧迫屡败屡战,最后终于成功。
方法1和2是失败记录,希望有类似经历成功的同学分享下经验。
方法3是成功记录,修改 = 新增 + 计算 +删除相关字段,因为没有删除改名前字段需求,故删除部分没有另做。
方法方法1 —— 【将【将shapefile的的dbf文件按文件按csv文件读写】文件读写】
——失败,dbf中有空值及编码问题
不同文件间通过改后缀简单粗暴改写,操作方法存在风险
过于依赖熟悉的领域,由于时间紧迫没有试用dbf第三方库
#-*- coding: utf-8 -*-
import os
import shutil
评论0
最新资源