将值写入新字段,Python GDAL OGR,不确定如何提交更改,为什么我的字段仍为空?

问题描述 投票:0回答:1

我使用gdal / ogr从2个源中读取一些s-57,并将其写入内存数据源。数据加载成功,我可以看到图层和值等。

encdriver = ogr.GetDriverByName("S57")

new_enc = encdriver.Open(new_enc_path)
old_enc = encdriver.Open(new_enc_path)

memdriver=ogr.GetDriverByName('MEMORY')
memsource=memdriver.CreateDataSource('memData')

tmp=memdriver.Open('memData',1)

memsource.CopyLayer(new_enc.GetLayerByName('lights'), 'new_lights',['OVERWRITE=YES'])
memsource.CopyLayer(old_enc.GetLayerByName('lights'), 'old_lights',['OVERWRITE=YES'])

new_lights = memsource.GetLayerByName('new_lights')
old_lights = memsource.GetLayerByName('old_lights')

然后我定义一个新字段(布尔值)并将其添加到图层,然后在每个图层中将其设置为true或false。

new_field = ogr.FieldDefn('NEW', ogr.OFSTBoolean)
new_lights.CreateField(new_field)
old_lights.CreateField(new_field)

layerDefinition = new_lights.GetLayerDefn()
print(layerDefinition.GetFieldCount())

new_lights.ResetReading()
old_lights.ResetReading()
print('NEW')
for feat in new_lights:
    feat.SetField('NEW', True)
    new_lights.CommitTransaction()
    print(feat.GetField('NEW'))


print('OLD')   
for feat in old_lights:
    feat.SetField('NEW', False)
    old_lights.CommitTransaction()
    print(feat.GetField('NEW'))

在该字段上方的两个循环中均以新值[0]或[1]进行打印>

print('OLD2')
old_lights.ResetReading()
for feat in old_lights:
    print(feat.GetField('NEW'))

但是当我尝试在上述循环之后读取这些层时,新字段为'None',没有任何值,我尝试添加datasource.CommitTransaction(),但似乎没有帮助。有人可以帮助解释我在这里缺少什么,我不确定为什么没有将值写入字段,但是我可以看到该字段现在确实存在。

我使用gdal / ogr从2个源中读取一些s-57,并将其写入内存数据源。数据加载成功,我可以看到图层和值等。encdriver = ogr.GetDriverByName(“ S57”)...

python vector gdal ogr
1个回答
0
投票

我应该继续阅读,发现这似乎是我提早提出一个问题。

© www.soinside.com 2019 - 2024. All rights reserved.