Невозможно выбрать континентальную Португалию при использовании OSMNX - PullRequest
1 голос
/ 04 мая 2020

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

Не могли бы вы мне помочь?

Спасибо за внимание.

1 Ответ

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

То, что вы, вероятно, сделали для загрузки данных из OpenStreetMap с использованием OSMNX , это:

import osmnx as ox
import geopandas as gpd
region = {'country':'Portugal'}
gdf = ox.gdf_from_place(region)
fig, ax = ox.plot_shape(gdf, figsize=(7,7))

, что дает:

Portugal

а именно, континентальная часть Португалии + ее острова, Азорские острова .

Поскольку континентальная часть самая большая, вы можно отфильтровать другие, используя shapely или Geo Pandas, например.


Но сначала давайте исследуем данные, вот gdf:

Initial gdf content

Это мульти-полигон. Итак, нам нужно взорвать его, например, согласно this :

exploded_gdf = gdf.explode()

Я использую Geo Pandas версию '0.7.0', это может не работать со старыми версиями.


Давайте исследуем эту новую геометрию:

Exploded geometry

Поскольку континентальная часть, вероятно, самая большая, вы можете вычислить и отсортировать их по их площадь:

exploded_gdf['area'] = exploded_gdf.area
exploded_gdf.sort_values(by='area', inplace=True)
exploded_gdf

Portugal areas

И наконец возьмите самый большой, вот последний, отсюда индекс -1:

# Extract the shapely underlying geometry:
continental_part = exploded_gdf.iloc[-1]['geometry']

Continental part

...