Как удалить океан с помощью OpenStreetMap?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как удалить океан с помощью OpenStreetMap?

Сообщение Anonymous »

Я работаю с данными библиотеки OpenStreetMap (osmnx, в Python), чтобы извлечь границу Сальвадора, Бразилия. Код успешно удаляет водоемы и получает материк и острова (я их опускаю для простоты), но есть проблема с искусственной треугольной границей, которая простирается в океан.
Этот треугольник образован частью административной границы, которая почему-то сливается с естественной береговой линией и не вычитается океаном. Как бы вы попытались удалить эту искусственную треугольную границу в OpenStreetMap? Есть ли какой-нибудь другой фильтр, который мне следует попробовать? Я хочу найти более общее решение, чем делать «дебафф, бафф» вручную. Я пробовал использовать береговую линию, но результаты оказались не очень хорошими.

Код: Выделить всё

import osmnx as ox
import shapely

def get_city_boundary(place_name):
city_gdf = ox.geocode_to_gdf(place_name)
city_polygon = city_gdf.loc[0, "geometry"]

expand = 0
minx, miny, maxx, maxy = city_polygon.bounds
bounding_box = shapely.geometry.box(minx - expand, miny - expand, maxx + expand, maxy + expand)

try:
water_tags = {"natural": ["bay"], "maritime": "yes"}
water_gdf = ox.features_from_polygon(bounding_box, tags=water_tags)
if not water_gdf.empty:
water_union = water_gdf.geometry.union_all()
city_polygon = city_polygon.difference(water_union)
except Exception as e:
print(f"Error processing water areas: {e}")

city_polygon = city_polygon.buffer(0)
### change around here a bit if you want the islands of the city to appear
if isinstance(city_polygon, shapely.geometry.MultiPolygon):
polygons = list(city_polygon.geoms)
city_polygon = max(polygons, key=lambda p: p.area)

return city_polygon

place_name = "Salvador, Bahia, Brazil"
processed_polygon = get_city_boundary(place_name)

processed_gdf = ox.geocode_to_gdf(place_name).copy()
processed_gdf.loc[0, "geometry"] = processed_polygon

if processed_gdf.crs is None:
processed_gdf.set_crs(epsg=4326, inplace=True)

output_file = "salvador_processed_boundary.shp"
processed_gdf.to_file(output_file)
Изображение


Подробнее здесь: https://stackoverflow.com/questions/793 ... nstreetmap
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как ограничить размер ответа от API OpenStreetMap Overpass в Python с помощью функций Azure?
    Anonymous » » в форуме Python
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Как ограничить размер ответа от API OpenStreetMap Overpass в Python с помощью функций Azure?
    Anonymous » » в форуме Python
    0 Ответы
    24 Просмотры
    Последнее сообщение Anonymous
  • Как ограничить размер ответа от API OpenStreetMap Overpass в Python с помощью функций Azure?
    Anonymous » » в форуме Python
    0 Ответы
    23 Просмотры
    Последнее сообщение Anonymous
  • Найдите шаблон в Openstreetmap с помощью Python
    Anonymous » » в форуме Python
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous
  • Шины линии/маршруты от OpenStreetMap с помощью OSMNX
    Anonymous » » в форуме Python
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»