如何用 Python 解析 GeoJSON

Posted

技术标签:

【中文标题】如何用 Python 解析 GeoJSON【英文标题】:How can I parse GeoJSON with Python 【发布时间】:2017-08-02 21:15:07 【问题描述】:

我有来自查询的 geojson 数据,现在我想解析并在屏幕上打印。我当前的代码是:

import urllib
import geojson

while True:

    url = 'https://earthquake.usgs.gov/fdsnws/event/1/query?format=geojson&starttime=2012-01-01&endtime=2017-03-01&minmagnitude=4.0&maxmagnitude=9.0&minlongitude=5.95&maxlongitude=10.50&minlatitude=45.81&maxlatitude=47.81'
    uh = urllib.urlopen(url)
    data = uh.read()
    print data
    break

看来data 是一个简单的字符串。但是,我认为它可以像json 参数一样解析。我如何处理geojson 数据才能打印单个point,例如只提取第一个点的坐标?

【问题讨论】:

我猜while Truebreak 可以完全删除? 【参考方案1】:

你可以像任何 json 一样阅读它:

import json
data = json.loads(datastring)
data['features'][0]['geometry'] #Your first point

【讨论】:

如果从文件加载:使用 data = json.load(fileobject) 这就是我要寻找的。当我使用您的解决方案时,我得到一个看起来像 0 MultiLineString [[[8.5551415, 49.8598025], [8.5563399, 49.8598... 的 3 列字典。如您所见,第三列有我想要的坐标。您是否知道我如何将坐标传输到具有纬度和经度作为单独列的数据框中,因为这些值代表了这一点?【参考方案2】:
import geojson
with open(path_to_file) as f:
    gj = geojson.load(f)
features = gj['features'][0]

【讨论】:

这与使用基本包json加载文件有何不同? 有效!应该被标记为接受的答案! geojson 库自 2019 年以来没有任何版本,因此我建议改用更流行和最近的 geopandas【参考方案3】:

你也可以使用geopandas:

import geopandas as gpd
earthquake = gpd.read_file('earthquake.geojson')
print(earthquake.head())

【讨论】:

警告:此方法不是以 geojson 格式读取数据。它将数据读取为地理数据框。 这通常是读取 GeoJSON 并理解其中包含的内容的最快和最简单的方法。【参考方案4】:

您可以通过 json 导入读取它,并打开文件:

import json
with open(path) as f:
    data = json.load(f)
for feature in data['features']:
    print(feature['properties'])

【讨论】:

【参考方案5】:

可以直接使用pandas库

import pandas as pd
data = pd.read_json('File.geojson')

重要的是了解这个json文件的结构并操作其中的字典

【讨论】:

以上是关于如何用 Python 解析 GeoJSON的主要内容,如果未能解决你的问题,请参考以下文章

如何用python解析来自websocket的数据?

如何用 ijson 和 python 解析 json

如何用Python解析多层嵌套的JSON?

如何用python解析json对象(基础篇)

如何用python解析soap消息体中的参数

如何用2位数年份解析字符串日期?