Gis 如何从GeoJSON创建要素集合

Gis 如何从GeoJSON创建要素集合,gis,geojson,geopandas,Gis,Geojson,Geopandas,我有一个特征集合的多边形和多面多边形,我必须先将其写入一个临时文件,然后用geopandas.GeoDataFrame加载它。从_文件(tmp_json_文件),我正在寻找一种不用临时文件的方法。我曾尝试使用geopandas.GeoDataFrame。从_feature(),它对于简单多边形的特征收集非常有效,但我无法使其适用于多边形的特征收集和多多边形,我正在考虑做下面的事情,但它还不起作用 features_collection = [] for feature in json_data

我有一个
特征集合
多边形
多面多边形
,我必须先将其写入一个临时文件,然后用geopandas.GeoDataFrame加载它。从_文件(tmp_json_文件),我正在寻找一种不用临时文件的方法。我曾尝试使用
geopandas.GeoDataFrame。从_feature()
,它对于简单多边形的特征收集非常有效,但我无法使其适用于
多边形的
特征收集
多多边形
,我正在考虑做下面的事情,但它还不起作用

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,返回territory(一些territory由单个多边形建模,另一些由一组多边形(格式化为多多边形)建模)

GeoJSON的结构如下:

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

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()
回溯(最近一次呼叫最后一次):
文件“overlap.py”,第210行,在
将bdv\U json\U打印到\U geodf(等高线\U bdv)
文件“overlap.py”,第148行,json_to_geodf格式
返回geopandas.GeoDataFrame.from_features(集合['features'))
文件“/Library/Python/2.7/site packages/geopandas/geodataframe.py”,第179行,在from_features中
d={'geometry':形状(f['geometry'])}
文件“/Library/Frameworks/GEOS.framework/Versions/3/Python/2.7/site packages/shapely/geometry/geo.py”,第40行,形状
返回多多边形(ob[“坐标”],context_type='geojson')
文件“/Library/Frameworks/GEOS.framework/Versions/3/Python/2.7/site packages/shapely/geometry/multipolygon.py”,第64行,在__
self.\u geom,self.\u ndim=geos\u multipolygon\u from\u py(多边形)
文件“/Library/Frameworks/GEOS.framework/Versions/3/Python/2.7/site packages/shapely/geometry/multipolygon.py”,第138行,在GEOS_multipolygon_from_py中
N=len(ob[0][0][0])
TypeError:类型为“float”的对象没有len()

对于我来说,如果我只是将json_数据功能提供给
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混合了多边形和多多边形,如输入数据中所示:

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

我在Windows上使用GeoPandas 0.2、shapely 1.5.15和pandas 0.18.1进行了尝试。

对于我来说,如果我只将json_数据功能提供给
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混合了多边形和多多边形,如输入数据中所示:

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

我在Windows上使用GeoPandas 0.2、shapely 1.5.15和pandas 0.18.1进行了尝试。

请提供一个可复制的示例()。什么是
json\u数据
?如果它已经是FeatureCollection,为什么要创建FeatureCollection?如果将它提供给
GeoDataFrame,会出现什么错误。从\u features
?是的,我编辑了我的后请提供一个可复制的示例()。什么是
json\u数据
?如果它已经是FeatureCollection,为什么要创建FeatureCollection?如果将它提供给
GeoDataFrame,会出现什么错误。从\u features
?是的,我编辑了我的帖子