GISデータを含む次のJSON( https://data.cityofnewyork.us/resource/5rqd-h5ci.json )をGeoDataFrameに読み込むのに問題があります。
ジオメトリを設定しようとすると、次のコードが失敗します。
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()
geopandas.GeoDataFrame
コンストラクターがJSONオブジェクトをpythonデータ構造として処理するように構築されていないように見えるため、ジオメトリの設定が失敗します。したがって、引数が有効なジオメトリオブジェクトではないという文句があります。 geopandas.GeoDataFrame
のように、shapely.geometry.shape
が理解できるものに解析する必要があります。これが私の側でエラーなしで実行されたものです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()
免責事項:私はGeoについて何も知りません。私はこれらのライブラリさえ知りませんでした。この種のデータは、この恩恵に取り組み、オンラインドキュメントを少し読むためにgeopandas
をインストールするまで存在していました。
Webマッピングライブラリを使用している人のために...
GeoJSONがFeatureCollection
でラップされている場合、Webマッピングライブラリ(私の場合はLeaflet)によってGeoJSON文字列にエクスポートされるときによくあることですが、必要なのはfeatures
からfrom_features()
のように:
import geopandas as gpd
study_area = json.loads("""
{"type": "FeatureCollection", "features": [{"type": "Feature", "properties": {}, "geometry": {"type": "Polygon", "coordinates": [[[36.394272, -18.626726], [36.394272, -18.558391], [36.489716, -18.558391], [36.489716, -18.626726], [36.394272, -18.626726]]]}}]}
""")
gdf = gpd.GeoDataFrame.from_features(study_area["features"])
print(gdf.head())
出力:
geometry
0 POLYGON ((36.394272 -18.626726, 36.394272 -18....
簡単なピーシー。
pandas
とネイティブのGeoDataFrame.from_features
から継承された通常のデータフレーム関数を使用するより慣用的な方法:
gdf = gpd.GeoDataFrame(data.json())
# features column does not need to be stored, this is just for illustration
gdf['features'] = gdf['the_geom'].apply(lambda x: {'geometry': x, 'properties': {}})
gdf2 = gpd.GeoDataFrame.from_features(gdf['features'])
gdf = gdf.set_geometry(gdf2.geometry)
gdf.head()