そして、最初Feature Collection
に一時ファイルに書き込んでから geopandas.GeoDataFrame.from_file(tmp_json_file) でロードする必要があります。一時ファイルなしでそれを行う方法を探しています。を使用しようとしましたが、単純な Polygon の Feature Collection ではかなりうまく機能しますが、とでは機能しません。以下のようなことを考えていましたが、まだ機能していません。Polygons
MultiPolygons
geopandas.GeoDataFrame.from_feature()
Feature Collection
Polygons
MultiPolygons
features_collection = []
for feature in json_data['features']:
tmp_properties = {'id': feature['properties']['id']}
if is_multipolygon (feature):
tmp = Feature(geometry=MultiPolygon((feature['geometry']['coordinates'])), properties=tmp_properties)
else:
Feature(geometry=Polygon((feature['geometry']['coordinates'])), properties=tmp_properties)
features_collection.append(tmp)
collection = FeatureCollection(features_collection)
return geopandas.GeoDataFrame.from_features(collection['features'])
GeoJSON は API から取得され、テリトリーを返します (一部のテリトリーは 1 つのポリゴンでモデル化され、他のテリトリーは一連のポリゴン (MultiPolygon としてフォーマット) でモデル化されます)。
GeoJSON は次のように構成されています: http://pastebin.com/PPdMUGkY
上記の関数から次のエラーが発生します。
Traceback (most recent call last):
File "overlap.py", line 210, in <module>
print bdv_json_to_geodf(contours_bdv)
File "overlap.py", line 148, in json_to_geodf
return geopandas.GeoDataFrame.from_features(collection['features'])
File "/Library/Python/2.7/site-packages/geopandas/geodataframe.py", line 179, in from_features
d = {'geometry': shape(f['geometry'])}
File "/Library/Frameworks/GEOS.framework/Versions/3/Python/2.7/site-packages/shapely/geometry/geo.py", line 40, in shape
return MultiPolygon(ob["coordinates"], context_type='geojson')
File "/Library/Frameworks/GEOS.framework/Versions/3/Python/2.7/site-packages/shapely/geometry/multipolygon.py", line 64, in __init__
self._geom, self._ndim = geos_multipolygon_from_py(polygons)
File "/Library/Frameworks/GEOS.framework/Versions/3/Python/2.7/site-packages/shapely/geometry/multipolygon.py", line 138, in geos_multipolygon_from_py
N = len(ob[0][0][0])
TypeError: object of type 'float' has no len()