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()