# Emergency Evacuation Portal Placement Python-скрипт для определения оптимальных точек размещения экстренных эвакуационных порталов на базе данных больниц из OpenStreetMap и Википедии. ## Результат CSV-файл `output/portals.csv` со столбцами: | Столбец | Описание | |-----------------|--------------------------------------------------| | country | Страна | | city | Город | | hospital_name | Название медицинского учреждения | | priority | Приоритет размещения портала (1-5, 5 = высший) | | latitude | Широта (WGS84) | | longitude | Долгота (WGS84) | ## Установка зависимостей ```bash pip install requests shapely ``` ## Запуск ```bash python portals.py ``` Скрипт последовательно проходит 4 этапа: 1. **OSM** — загрузка больниц из Overpass API (Россия по субъектам, США целиком, 20 стран ЕС) 2. **Nominatim** — заполнение городов для больниц без тега `addr:city` 3. **Википедия** — дополнение числа коек из en/ru wiki 4. **Приоритет** — расчёт и запись 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`).