Загрузите из Overpass API и конвертируйте в geojson с помощью Python.Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Загрузите из Overpass API и конвертируйте в geojson с помощью Python.

Сообщение Anonymous »

Я хочу загрузить некоторые данные из OSM Overpass API и преобразовать эти данные в geojson с помощью Python.
Я подготовил пример с мультиполигоном. В моем UseCase файлы гораздо большего размера.
Часть загрузки работает, но при преобразовании я вижу эту ошибку ниже.
Но во внешнем интерфейсе я вижу этот многоугольник, и он мне тоже нужен в геоджсоне.
Лучший
Failed to create multipolygon. Base shape with role "outer" is invalid. Group ids: [431444168,
431444172,
431444165,
431444166,
431444160,
431444162,
431444176,
1175053062,
431444159,
431444167,
431444173,
431444164,
431444155,
431444158,
431444156,
431444169,
431444163,
431444175,
431444174]
Failed to convert computed shapes to multipolygon 6417656
Element not converted 6417656

import osm2geojson
import codecs
import os
import json
import requests
from pathlib import Path

myinput_path = r"C:\tmp_geo"
myinput_filename="IT2.json"
myoutput_filename=myinput_filename.replace(".json",".geojson")

os.makedirs(myinput_path, exist_ok=True)

myinput=os.path.join(myinput_path,myinput_filename)
myoutput=os.path.join(myinput_path,myoutput_filename)

def download_osm_data(query, filepath_osm):
useragent = 'YourAppName/ContactInfo'
headers = {'User-Agent': useragent, 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'}
data = {'data': query}
try:
response = requests.post('https://overpass-api.de/api/interpreter', headers=headers, data=data, verify=False)
response.raise_for_status()
with open(Path(filepath_osm), 'w', encoding='utf-8') as f:
f.write(response.text)
return True
except requests.RequestException as e:
raise RuntimeError(f"Download error: {e}")

query = f"""
[out:json][timeout:25];
(
relation["boundary"="protected_area"]["type"="multipolygon"](43.1851, 9.6689, 44.4386, 11.3216);
);
out geom;

"""

download_osm_data(query, myinput)

with codecs.open(myinput, 'r', encoding='utf-8') as data:
inputdata = data.read()

geojsondata=osm2geojson.json2geojson(inputdata, filter_used_refs=False, log_level='INFO')

with open(myoutput, 'w', encoding='utf-8') as f:
json.dump(geojsondata, f, ensure_ascii=False, indent=2)


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

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

Изменение регистра текста: 
Смайлики
:) :( :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 Ответы
    25 Просмотры
    Последнее сообщение Anonymous
  • Как ограничить размер ответа от API OpenStreetMap Overpass в Python с помощью функций Azure?
    Anonymous » » в форуме Python
    0 Ответы
    24 Просмотры
    Последнее сообщение Anonymous
  • Overpass запрашивает достопримечательности по городам
    Гость » » в форуме Python
    0 Ответы
    22 Просмотры
    Последнее сообщение Гость
  • Загрузите изображение по URL-адресу и загрузите в медиатеку WordPress.
    Anonymous » » в форуме Php
    0 Ответы
    68 Просмотры
    Последнее сообщение Anonymous

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