我正在使用带有以下代码的OSMnx库从OpenStreetMap中检索一些几何:
G = ox.graph_from_place('Casco Viejo, Bilbao, Spain', network_type='walk',
retain_all=True, buffer_dist = 50, which_result = 2,
infrastructure = 'relation["highway" = "pedestrian"]')
这将产生以下由线形组成的图形:
然后将图形转换为geopandas地理数据框:
ped = ox.graph_to_gdfs(G, nodes = False)
我已经尝试过将Linestrings
转换为Points
,然后将Points
转换为Multipolygon
是否有一种方法可以将这些线串转换为整齐的Multipolygon
:
from shapely import geometry, ops
# combine them into a multi-linestring
multi_line = geometry.MultiLineString(list(ped['geometry']))
merged_line = ops.linemerge(multi_line)
from shapely.geometry import Point, MultiPoint
points = []
for i in range(0, len(merged_line)):
points.append((Point(list(merged_line[i].coords[1]))))
coords = [p.coords[:][0] for p in points]
poly = Polygon(coords)
这会产生奇怪的错误几何图形:
shape(poly)
[如果我尝试:
MultiPolygon(points)
它给出此错误消息:TypeError: 'Point' object is not subscriptable
是否有将Linestrings
转换为Multipolygon
并将其转换为GeoDataFrame
的方法?
[如果您尝试使用ox.graph_from_X
函数构造图,则没有polgon或multipolygons是没有意义的,因为图模型仅仅是一组由边相互链接的元素(节点)。] >
如果只需要该区域中可步行元素的几何形状(点,多边形,多多边形等),则应使用pois模块来获取几何形状的GeoDataFrame(无任何图拓扑),例如:
import osmnx as ox ox.config(use_cache=True, log_console=True) place = 'Casco Viejo, Bilbao, Spain' gdf = ox.pois_from_place(place, which_result=2, tags={'highway':'pedestrian'}) gdf.shape #(87, 56)
最后,请注意,
infrastructure
参数的使用在几个版本之前已被弃用,而在先前的版本中已删除。您可能需要将软件包更新为最新版本。