Я читаю какой-то s-57 из 2 источников с помощью gdal / ogr и записываю его в источник данных памяти. Данные загружаются успешно, и я вижу слои и значения и т.д. c.
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'))
, но когда я пытаюсь прочитать эти слои после приведенное выше l oop, новое поле - «Нет», не имеет значений, я попытался добавить источник данных.CommitTransaction (), но, похоже, это не помогло. Может ли кто-нибудь помочь объяснить, что мне здесь не хватает, я не уверен, почему значения не записываются в поле, но я вижу, что поле теперь существует.