Проблемы при попытке изменить имя поля файла geojson с помощью gdal / ogr - PullRequest
0 голосов
/ 23 июня 2019

Я пытаюсь прочитать файл geojson, используя gdal / ogr, и создать другой файл geojson с тем же количеством объектов и выбором его исходных полей.Это работает!

Вы можете скачать файл здесь: https://catalog.data.gov/dataset/building-footprint-gis-data/resource/1d33da3b-3e64-4551-9188-f572aa535874

Проблема возникает, если я пытаюсь изменить имя поля при создании нового файла.Если я открою таблицу атрибутов нового файла, он будет пустым.Новые имена созданы, но в таблице не хранятся значения.

Я пробовал один и тот же код для чтения шейп-файлов и файлов gml, и я работаю.Это означает, что я смог создать новый файл с новыми именами полей и его исходными значениями.

Проблема возникает только тогда, когда файл для чтения является геойсон, и только если я пытаюсь изменитьНаименование полей.Я заметил, что это происходит с любым файлом geojson, не только с тем, который я использую в этом сценарии.

from osgeo import ogr,osr

input = r"E:\PARSING_OGR\DATA\LESSONS\BloomingtonBuildings.geojson"
output = r"E:\PARSING_OGR\RESULTS\LESSONS\FILES\BloomingtonBuildings.geojson"

spatialRefSource = osr.SpatialReference()
spatialRefSource.ImportFromEPSG(2966)

driver = ogr.GetDriverByName('GeoJSON')
dataSource = driver.Open(input)
layer = dataSource.GetLayer()

newDataSource = driver.CreateDataSource(output)
newLayer = newDataSource.CreateLayer('BloomingtonBuildings',srs = spatialRefSource,geom_type=ogr.wkbPolygon)

layerDefinition = layer.GetLayerDefn()

fieldDefn1 = layerDefinition.GetFieldDefn(0)
fieldDefn2 = layerDefinition.GetFieldDefn(1)
fieldDefn3 = layerDefinition.GetFieldDefn(3)
fieldDefn4 = layerDefinition.GetFieldDefn(8)

fieldDefn1.SetName('FIELD1')
fieldDefn2.SetName('FIELD2')
fieldDefn3.SetName('FIELD3')
fieldDefn4.SetName('FIELD4')

newLayer.CreateField(fieldDefn1)
newLayer.CreateField(fieldDefn2)
newLayer.CreateField(fieldDefn3)
newLayer.CreateField(fieldDefn4)

newFeatureDefn = newLayer.GetLayerDefn()
for feature in layer:
    newFeature = ogr.Feature(newFeatureDefn)
    newFeature.SetGeometry(feature.GetGeometryRef())
    newFeature.SetField('FIELD1', feature.GetField('FIELD1'))
    newFeature.SetField('FIELD2', feature.GetField('FIELD2'))
    newFeature.SetField('FIELD3', feature.GetField('FIELD3'))
    newFeature.SetField('FIELD4', feature.GetField('FIELD4'))
    newLayer.CreateFeature(newFeature)
    feature= None
    newFeature= None
dataSource= None
newDataSource= None

Буду признателен, если кто-нибудь поможет мне решить эту проблему.

...