Преобразование замкнутых строк из графа OSMnx в мультиполигон - PullRequest
0 голосов
/ 16 июня 2020

Я извлекаю некоторые геометрические формы из OpenStreetMap с библиотекой OSMnx со следующим кодом:

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"]')

, который дает следующий график, состоящий из красивых линий линий:

Затем я конвертирую график в geo pandas geodataframe:

ped = ox.graph_to_gdfs(G, nodes = False)

Я пробовал это, чтобы преобразовать Linestrings в Points, а затем Points to 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?

1 Ответ

0 голосов
/ 16 июня 2020

Если вы пытаетесь построить граф, используя функции ox.graph_from_X, нет смысла иметь полигоны или мультиполигоны, поскольку модель графа - это просто набор элементов (узлов), связанных друг с другом ребрами.

Если вам просто нужна геометрия (точки, многоугольники, мультиполигоны и т. Д. c) проходимых элементов в области, то вы должны использовать модуль 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 было объявлено устаревшим в нескольких выпусках go и удалено в предыдущем выпуске. Вы можете обновить пакет до последней версии.

...