如何使用Python解析GeoJSON

25

我有一个来自查询的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,例如只提取第一个点的坐标?


2
我猜 while Truebreak 可以完全删除? - Martin Thoma
5个回答

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

5
这与使用基本包json加载文件有何不同? - duhaime
可以工作!应该标记为被接受的答案! - hzitoun
2
geojson 库自2019年以来没有发布任何版本,因此我建议使用更受欢迎和最新的 geopandas - lucidyan

32
你可以像读取任何json一样阅读它:
import json
data = json.loads(datastring)
data['features'][0]['geometry'] #Your first point

3
如果从文件加载:使用 data = json.load(fileobject) - onxx
这正是我正在寻找的。当我使用您的解决方案时,我得到了一个看起来像这样的字典 0 MultiLineString [[[8.5551415, 49.8598025], [8.5563399, 49.8598...,它有3列。正如您所看到的,第三列包含了我想要的坐标。您是否知道我如何将这些坐标转换为数据框,使纬度和经度成为单独的列,因为这些值代表了这些信息? - Gobrel

23

您也可以使用geopandas

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

8
注意:此方法不是将数据读取为GeoJSON格式,而是将其作为地理数据框读取。 - Yanni Cao
2
这通常是阅读GeoJSON并理解其内容的最快最简单的方法。 - Dahn

6

您可以使用json导入和文件打开来读取它:

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

我必须使用utf-8编码:open(path, encoding='utf-8') - Stefan

4
您可以直接使用pandas库。
import pandas as pd
data = pd.read_json('File.geojson')

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接