Получение данных из многоугольника с помощью osmnx - PullRequest
1 голос
/ 05 мая 2020

Прежде чем задать вопрос, я покажу, что я сделал:

Я использую Pyhton и пакеты, которые скоро покажу.

Я хочу получить доступ к данным, которые соответствуют Continental Португалия (часть рядом с Испанией, исключая острова), используя osmnx:

import geopandas as gpd
import pandas as pd
from shapely.geometry import Point, LineString, Polygon
import networkx as nx
import osmnx as ox
import matplotlib.pyplot as plt
from descartes import PolygonPatch
from IPython.display import IFrame
ox.config(log_console=True, use_cache=True)

Выбрал место. Я получил MultiPolygon, который соответствует Португалии

place = 'Portugal'
G = ox.gdf_from_place(place)
fig, ax = ox.plot_shape(G, figsize=(17,17))

Я хочу только континентальную Португалию, я имею в виду, что это только часть рядом с Испанией и не включает такие острова, как Азорские острова и Мадейра. Поэтому я исследовал геометрию MultipPolygon. Затем отсортировал все полигоны по площади и выбрал тот, у которого самая большая площадь.

exploded_G = G.explode()
exploded_G['area'] = exploded_G.area
exploded_G.sort_values(by='area', inplace=True)
Portugal= exploded_G.iloc[-1]['geometry']

Мой вопрос: как мне получить доступ ко всей информации, такой как достопримечательности, дороги, узлы и т. Д. c Полигона, который у меня есть сейчас (тот, который я назвал Португалией).

Заранее спасибо.

1 Ответ

1 голос
/ 06 мая 2020

Поскольку континентальная Португалия требует большого количества данных и, следовательно, требует много времени, я просто выполнил следующие шаги на одном из меньших полигонов. Таким образом, следующее должно работать и в «Португалии».

exploded_gdf_place = gdf_place.explode()
exploded_gdf_place['area'] = exploded_gdf_place.area
exploded_gdf_place.sort_values(by='area', inplace=True)
smaller_area_Portugal= exploded_gdf_place.iloc[4]['geometry']

Вы можете использовать функцию OSMNx graph_from polygon для получения дорожной сети (например, автомобильной или пешеходной).

g = ox.graph_from_polygon(polygon = smaller_area_Portugal, network_type = 'drive')
fig, ax = ox.plot_graph(g, fig_height=5)

Затем вы можете получить данные относительно узлов и ребер того же графа, что и фреймы геоданных, следующим образом.

gdf_nodes,gdf_edges = ox.graph_to_gdfs(g, nodes=True, edges=True)

используйте следующее. Я не указал какой-либо конкретный тип удобств, но это тоже можно сделать. См. Документацию.

gdf_pois = ox.pois.osm_poi_download(polygon=smaller_area_Portugal)

Один из примеров полученного POI в пределах многоугольника должен быть получен следующим образом.

sample_poi = gdf_pois['elements'][0]
...