尝试使用gdal/og更改geojson文件的字段名时出现问题

2024-04-28 20:43:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用gdal/ogr读取一个geojson文件,并创建另一个geojson文件,该文件具有相同数量的特性和对其原始字段的选择。真管用!你知道吗

您可以在此处下载文件: https://catalog.data.gov/dataset/building-footprint-gis-data/resource/1d33da3b-3e64-4551-9188-f572aa535874

如果在创建新文件时尝试更改字段的名称,就会出现问题。如果我打开新文件的属性表,它是空的。已创建新名称,但表中没有存储任何值。你知道吗

我尝试了同样的代码读取shapefile和gml文件,我的工作。这意味着我可以用新的文件名和它的原始值创建一个新文件。你知道吗

只有当要读取的文件是geojson并且我尝试更改字段的名称时,问题才会出现。我注意到任何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

如果有人能帮我解决这个问题,我将不胜感激。你知道吗


Tags: 文件名称nonegeojsonfeatureogrgetfieldnewfeature