基于 OpenStreetmap 生成曲面细分时 momepy.preprocess 期间出错

Error during momepy.preprocess while generating tessellation based on OpenStreemap

我正在学习 Python (momepy) 工具包教程中的形态学测量,当我稍微偏离说明时 运行 遇到了问题。

使用momepy.preprocess时,我一直收到错误 “ValueError:使用可迭代设置时必须具有相等的 len 键和值。”

只有在我尝试 运行 momepy.preprocess 与教程不同的区域时才会出现这种情况 - 到目前为止,该区域包括美国伊利诺伊州的香槟、厄巴纳和皮奥里亚;英国牛津;和德国耶拿。当 运行 在德国 Kahla(教程中提到的位置)时,过程 运行 正确。拉动上述城市的 osmnx 过程似乎工作正常,通过 plt.subplots 绘制它们也是如此。因此,我有理由相信问题出在 momepy.preprocess.

文档指出 momepy.preprocess 是“实验性的”,但由于我自己缺乏经验和专业知识,我怀疑问题出在我身上。

提前感谢您提供的任何帮助 - 我很高兴能更多地了解这套强大的工具!

输入 momepy.preprocess 的地理数据框只能包含多边形。有时 OSM returns “建筑物”层中的非多边形元素。从原始地理数据框中提取多边形解决了问题,但为了避免删除可能有价值的 MultiPolygon 几何图形,您应该在这样做之前使用 explode。由于 geopandas 中的错误,在使用 explode 并提取多边形后可能需要 reset_index

注意:重置索引函数returns一个新的GeoDataFrame,不会改变原来的GeoDataFrame,所以需要重新赋值。

这是我的代码最终的样子:

#Get building geometries from OSM
gdf = ox.geometries.geometries_from_place('Main Quad, Champaign,Illinois', tags={'building':True}, buffer_dist=1000)

gdf_projected = ox.projection.project_gdf(gdf)

#Explode muti-part geometries into multiple single geometries. 
gdf_exploded = gdf_projected.explode()

#Strip out polygons from exploded gdf
gdf_exploded_poly = gdf_exploded.loc[gdf_exploded.geometry.type=='Polygon',:]

#Reset index
gdf_exploded_poly = gdf_exploded_poly.reset_index()

#Run momepy.preprocess
buildings = momepy.preprocess(gdf_exploded_poly, size=30, compactness=0.2, islands=True)