将OSMnx图形中的闭合线字符串转换为多多边形

2024-09-24 22:24:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用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 geodataframe:

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


Tags: from图形linemergedcoordsmultipointsgraph
1条回答
网友
1楼 · 发布于 2024-09-24 22:24:35

如果您试图使用ox.graph_from_X函数构造一个图,那么使用polgon或multipolgon是没有意义的,因为图模型只是一组通过边彼此链接的元素(节点)

如果您只需要区域中可行走元素的几何图形(点、多边形、多边形等),则应使用pois模块获取几何图形的地理数据框(无任何图形拓扑),如:

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参数的使用在几个版本之前已经被弃用,并在以前的版本中被删除。您可能希望将包更新到最新版本

相关问题 更多 >