字符串索引必须是整数 geojson

String indices must be integers geojson

我正在尝试从 Python 中的 Geojson 中提取坐标,当我尝试从整个文件中提取坐标时,它会抛出错误 "string indices must be integers"。但是当我尝试提取单个坐标时,它 运行 没问题。

下面的代码给出了正确的结果 [46.931625, -84.52694]

import geojson
with open('output.json') as f:
    gj = geojson.load(f)
features = gj['features'][0]

geometry = features['geometry']
geometry['coordinates']

但是当我尝试 运行 遍历整个文件时它会抛出一个错误

for feature in gj['features']:
    for geometry in feature['geometry']:
            for coordinates in geometry:
                print(geometry['coordinates'])

样本数据如下

{
  "type": "FeatureCollection",
  "features": [
    {
      "type": "Feature",
      "geometry": {
        "type": "Point",
        "coordinates": [
          46.931625,
          -84.52694
        ]
      },
      "properties": {
        "event": "a",
      }
    },
    {
      "type": "Feature",
      "geometry": {
        "type": "Point",
        "coordinates": [
          46.931725,
          -84.52684
        ]
      },
      "properties": {
        "event": "a",
      }
    }
  ]
}

你能帮我解决这个错误吗?提前致谢。

好吧,feature['geometry'] 是一个字典,所以下面这行将遍历该字典的键:

for geometry in feature['geometry']:

您收到该错误是因为 geometry 是一个键,例如 "type",它是一个字符串。此外,您似乎没有在代码中的任何地方使用循环变量 coordinates

请尝试以下操作:

for feature in gj['features']:
    print(feature["geometry"]['coordinates'])

或更好

for feature in gj['features']:
    lat, lon = feature["geometry"]['coordinates']
    print("Lat:", lat, "Lon: ", lon)

这应该会产生类似于

的结果
('Lat:', 46.931625, 'Lon: ', -84.52694)
('Lat:', 46.931725, 'Lon: ', -84.52684)

样本中的特征是唯一的数组对象。遍历特征并获取坐标数组。

压缩代码:

print([features['geometry']['coordinates'] for features in gj['features']])

这将遍历 gj['features'] 并仅打印每个特征的 features['geometry']['coordinates']

你的脚本看起来像这样

import geojson
with open('output.json') as f:
    gj = geojson.load(f)

print([features['geometry']['coordinates'] for features in gj['features']])