我使用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”)...
我应该继续阅读,发现这似乎是我提早提出一个问题。