mirror of
https://github.com/intari/portals-experiment.git
synced 2026-04-26 13:00:36 +00:00
Fetches hospital data from OSM + Wikipedia, calculates priority (1-5), outputs CSV with WGS84 portal coordinates for Russia, US, EU. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> |
||
|---|---|---|
| .gitignore | ||
| CLAUDE.md | ||
| portals.py | ||
| README.md | ||
Emergency Evacuation Portal Placement
Python-скрипт для определения оптимальных точек размещения экстренных эвакуационных порталов на базе данных больниц из OpenStreetMap и Википедии.
Результат
CSV-файл output/portals.csv со столбцами:
| Столбец | Описание |
|---|---|
| country | Страна |
| city | Город |
| hospital_name | Название медицинского учреждения |
| priority | Приоритет размещения портала (1-5, 5 = высший) |
| latitude | Широта (WGS84) |
| longitude | Долгота (WGS84) |
Установка зависимостей
pip install requests shapely
Запуск
python portals.py
Скрипт последовательно проходит 4 этапа:
- OSM — загрузка больниц из Overpass API (Россия по субъектам, США целиком, 20 стран ЕС)
- Nominatim — заполнение городов для больниц без тега
addr:city - Википедия — дополнение числа коек из en/ru wiki
- Приоритет — расчёт и запись CSV
Полный прогон занимает 15-20 минут.
Покрытие
| Регион | Страны |
|---|---|
| Россия | 85+ субъектов РФ (по ISO 3166-2) |
| США | Все штаты |
| Европа | DE, FR, NL, IT, ES, PL, SE, NO, FI, DK, AT, CZ, BE, CH, PT, IE, GR, HU, RO, BG |
Приоритеты
Приоритет рассчитывается на основе:
- Число коек (
beds) — основной фактор. Берётся из OSM-тегаbeds=*или из инфобокса Википедии. - Наличие экстренной помощи (
emergency=yesв OSM) — множитель x2 к скорингу. - Фоллбэки — если коек нет: emergency-больница получает базовый скор 200, обычная — 50.
| Приоритет | Скоринг (score) | Критерий |
|---|---|---|
| P5 | >= 1000 | >500 коек (emergency) или >1000 коек (обычная) |
| P4 | >= 400 | >200 коек (emergency) или >400 коек (обычная) |
| P3 | >= 150 | >75 коек (emergency) или >150 коек (обычная) / emergency без коек |
| P2 | >= 50 | >25 коек (emergency) или >50 коек (обычная) / любая без коек |
| P1 | < 50 | Небольшие учреждения |
Ограничения
- OSM-данные: тег
beds=*заполнен далеко не для всех больниц (хуже всего по РФ, лучше по Германии/Нидерландам). - Nominatim: лимит 1 запрос/сек, поэтому этап заполнения городов долгий для десятков тысяч больниц. Можно пропустить, если города не критичны.
- Википедия: обогащение идёт только для emergency-больниц и первых 500 обычных (лимит API).
- Overpass API: при таймаутах скрипт автоматически переключается на зеркала (
lz4,z,kumi).