将封闭的线串从OSMnx图转换为多多边形

问题描述 投票:0回答:1

我正在使用带有以下代码的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"]')

这将产生以下由线形组成的图形:

enter image description here

然后将图形转换为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的方法?

python shapely osmnx
1个回答
0
投票

[如果您尝试使用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参数的使用在几个版本之前已被弃用,而在先前的版本中已删除。您可能需要将软件包更新为最新版本。

© www.soinside.com 2019 - 2024. All rights reserved.