如何从GeoJSON创建特征集合

时间:2016-06-10 11:20:23

标签: gis geojson geopandas

我有Feature Collection PolygonsMultiPolygons,我必须首先将其写入临时文件,然后使用geopandas.GeoDataFrame.from_file(tmp_json_file)加载它,我'我正在寻找一种没有临时文件的方法。我尝试使用geopandas.GeoDataFrame.from_feature(),它适用于简单多边形的特征集合,但我无法使其适用于Feature CollectionPolygons的{​​{1}},我正在考虑做下面这样的事情,但它还没有奏效。

MultiPolygons

GeoJSON取自API,返回区域(某些区域由单个多边形建模,其他区域由一组多边形(格式化为MultiPolygon)。

GeoJSON的结构如下:http://pastebin.com/PPdMUGkY

我从上面的函数中得到以下错误:

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'])

1 个答案:

答案 0 :(得分:3)

对我而言,只要我将json_data功能提供给GeoDataFrame.from_features

,这就有效
In [17]: gdf = geopandas.GeoDataFrame.from_features(json_data['features'])

In [18]: gdf.head()
Out[18]:
                                            geometry  id
0  (POLYGON ((-0.58570861816406 44.810461337462, ...   2
1  (POLYGON ((-0.5851936340332 44.816550206151, -...   1
2  POLYGON ((-0.58805465698242 44.824018340447, -...   5
3  POLYGON ((-0.59412002563477 44.821664359038, -...   9
4  (POLYGON ((-0.58502197265625 44.817159057661, ...  12

生成的GeoDataFrame混合了多边形和MultiPolygons,如输入数据:

In [19]: gdf.geom_type.head()
Out[19]:
0    MultiPolygon
1    MultiPolygon
2         Polygon
3         Polygon
4    MultiPolygon
dtype: object

我在Windows上尝试使用GeoPandas 0.2,形状1.5.15,pandas 0.18.1。