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

Writing values to new field, Python GDAL OGR, not sure how to commit the changes, why are my fields still empty?

我正在使用 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() 但它似乎没有帮助。有人可以帮助解释我在这里缺少什么吗,我不确定为什么没有将这些值写入该字段,但我可以看到该字段现在确实存在。

我应该继续阅读,发现这个,似乎我发布问题有点早。

此函数与C++方法相同OGRFeature::SetField()。

此方法只对内存中的特征对象有影响。如果 这个对象来自一个层,修改必须是 序列化回数据源,必须使用 OGR_L_SetFeature() 然后。或者,如果这是一项新功能,则 OGR_L_CreateFeature() 必须是 之后使用。