2017-08-07 42 views
6

Mam trudności z załadowaniem następującego pliku JSON zawierającego dane GIS (https://data.cityofnewyork.us/resource/5rqd-h5ci.json) do GeoDataFrame.Ładowanie JSON do GeoDataFrame

Następujący kod kończy się niepowodzeniem, gdy próbuję ustawić geometrię.

import requests 
import geopandas as gpd 
data = requests.get("https://data.cityofnewyork.us/resource/5rqd-h5ci.json") 
gdf = gpd.GeoDataFrame(data.json()) 
gdf = gdf.set_geometry('the_geom') 
gdf.head() 
+0

Uwaga na przyszłość: ten plik json nie wygląda na prawidłowy GeoJSON. W przypadku takich plików można znacznie łatwiej użyć 'geopandas.read_file (..)' – joris

Odpowiedz

6

Ustawianie geometrii się nie powiedzie, ponieważ konstruktor geopandas.GeoDataFrame nie wydaje się być zbudowany do obsługi obiektów JSON jako struktury danych Pythona. W związku z tym narzeka, że ​​argument nie jest ważnym obiektem geometrii. Musisz przetworzyć go w coś, co może zrozumieć geopandas.GeoDataFrame, np. shapely.geometry.shape. Oto co prowadził bez błędów po mojej stronie, Python 3.5.4:

#!/usr/bin/env python3 

import requests 
import geopandas as gpd 
from shapely.geometry import shape 

r = requests.get("https://data.cityofnewyork.us/resource/5rqd-h5ci.json") 
r.raise_for_status() 

data = r.json() 
for d in data: 
    d['the_geom'] = shape(d['the_geom']) 

gdf = gpd.GeoDataFrame(data).set_geometry('the_geom') 
gdf.head() 

Zastrzeżenie: wiem nic o Geo niczego. Nie znałem nawet tych bibliotek i tego rodzaju dane istniały, dopóki nie zainstalowałem geopandas, aby rozwiązać ten problem i przeczytać trochę dokumentacji online.