Wizualizacja zasięgu dojazdu jednostek straży pożarnej (JRG i OSP w KSRG) na podstawie OpenStreetMap. Przykład: województwo śląskie z wyróżnieniem Górnośląsko-Zagłębiowskiej Metropolii (GZM). Pełna procedura + skrypty QGIS do odtworzenia dla dowolnego obszaru.
Warning
Materiał poglądowy / edukacyjny — NIE jest urzędową Analizą Zabezpieczenia Operacyjnego. Dane o jednostkach pochodzą z OpenStreetMap i bywają niepełne lub nieaktualne. Do zastosowań służbowych podstaw dane z KW/KP PSP (lokalizacje i gotowość jednostek) oraz z GUS (ludność) — patrz sekcja Dane urzędowe. Model nie uwzględnia gotowości, obsad, jednoczesnych zdarzeń ani warunków ruchu.
- Strażacy i analitycy PSP (KW/KP/JRG) — szybki, darmowy szkic pokrycia rejonu i „białych plam" przed sięgnięciem po pełne dane urzędowe; materiał do prezentacji, ćwiczeń, dyskusji o rozmieszczeniu sił.
- OSP / zarządy gminne — pokazanie roli jednostek KSRG w domykaniu luk JRG.
- Dziennikarze, samorządy, studenci, pasjonaci GIS — powtarzalna metoda na otwartych danych.
Sfinalizowane ryciny z opracowania metodycznego (próg dotarcia 15 min; jednostki KSRG: 50 JRG + 230 OSP-KSRG; prędkości planistyczne KG PSP 75/60/50/30 km/h, alarmowanie 3/10 min).
📊 Wynik dla woj. śląskiego (analiza 15-min, ~4,06 mln mieszk., siatka popytu 2 km; jednostki KSRG: 50 JRG + 230 OSP-KSRG)
| metoda (próg dotarcia 15 min) | pokrycie ludności |
|---|---|
| naiwny — bufor stały 250 m | 58,0 % |
| metodyczny — bufor malejący + bariery + ostatni odcinek | 48,3 % |
| różnica (zawyżenie metody naiwnej) | 9,7 p.p. ≈ widmo 1 288 km² |
Wniosek: uproszczony bufor stały zawyża pokrycie 15-minutowe o ~9,7 p.p. względem metodyki, która uwzględnia malejący zasięg dojścia, bariery (rzeki, tory) i realne dojście poza drogą. Zawyżenie („widmo", 1 288 km²) rozkłada się wzdłuż sieci dróg — tam, gdzie naiwny bufor 250 m dorysowuje zasięg, którego model dojścia nie potwierdza. Pełna dekompozycja wpływu poszczególnych decyzji metodycznych → Ryc. 4.
- Izochrona = obszar, z którego najbliższa jednostka dojeżdża w zadanym czasie (8 lub 15 min), jadąc drogami z prędkością zależną od klasy drogi. Im ciemniejsza zieleń, tym szybszy dojazd.
- Czerwone trójkąty — JRG/PSP (zawodowe); niebieskie trójkąty — OSP w KSRG; szare kropki — OSP poza KSRG.
- Białe/niezielone pola wewnątrz województwa = poza zasięgiem przyjętego czasu = potencjalne „białe plamy".
- Progi 8/15 min są przykładowe — łatwo zmienić (np. na progi z lokalnej AZO) w skrypcie kroku 2.
- Pobranie danych z OpenStreetMap (Overpass API): granice (województwo, metropolia, gminy),
jednostki
amenity=fire_station, drogi, tunele, tereny przemysłowe. - Klasyfikacja jednostek:
operator=Państwowa Straż Pożarnalub nazwa „JRG" → JRG; tagksrg=yes→ OSP-KSRG; pozostałe → OSP. Deduplikacja (węzeł + budynek tej samej jednostki) w promieniu 50 m. - Gęstość zaludnienia: tag OSM
populationgminy ÷ jej powierzchnia. - Izochrony (analiza sieciowa): sieci dróg nadajemy prędkość wg klasy drogi (i tagu
maxspeed), budujemy graf i liczymy algorytmem Dijkstry najkrótszy czas dojazdu z każdej jednostki; dla każdego punktu sieci bierzemy minimum do najbliższej jednostki. Osiągalne drogi buforujemy o 250 m i scalamy w obszar pokrycia. - Układy współrzędnych: analizy metryczne w EPSG:32634 (UTM 34N), wyświetlanie w EPSG:3857 (z podkładem OSM). Uwaga: w użytej instalacji QGIS reprojekcja w locie do PUWG 1992/EPSG:2180 bywa zawodna — dlatego dane są fizycznie przerzucane do docelowego układu.
Przyjęte prędkości [km/h]: autostrada 120, GP/trunk 90, główna 70, zbiorcza 60, lokalna 50,
unclassified 45, mieszkaniowa 30, living_street 20 (łącznice odpowiednio niżej); nadpisywane tagiem maxspeed.
Wymagania: QGIS 3.34+ lub 4.x (z wbudowanym Pythonem i Processing), dostęp do internetu.
# 1. Pobranie i przygotowanie danych OSM — Konsola Pythona QGIS:
exec(open('/ścieżka/01_fetch_osm.py').read())
# 2. Izochrony — uruchom DWUKROTNIE (zmień SRC/PREFIX w nagłówku skryptu):
# a) SRC='jrg34.gpkg', PREFIX=''
exec(open('/ścieżka/02_isochrones.py').read())
# b) SRC='jrgksrg34.gpkg', PREFIX='k' (drugie uruchomienie)
exec(open('/ścieżka/02_isochrones.py').read())
# 3. Bufor + scalenie + reprojekcja — terminal:
./03_run_buffers.sh # JRG
./03_run_buffers.sh k # JRG + KSRG
# 4. Załadowanie i stylizacja warstw — Konsola Pythona QGIS:
exec(open('/ścieżka/04_build_map.py').read())
Następnie w QGIS otwórz azo_gzm.qgz (gotowy projekt z 4 kompozycjami wydruku AZO_A…AZO_D)
i wyeksportuj figury (Projekt → Układ wydruku → Eksportuj jako obraz/PDF).
Inny obszar? W 01_fetch_osm.py zmień WOJ_NAZWA (dokładna nazwa OSM, admin_level=4),
opcjonalnie GZM_REL (relacja OSM aglomeracji) oraz UTM_EPSG (32633 dla zachodniej Polski, 32634 dla wschodniej).
W katalogu qgis_plugin/ jest gotowa wtyczka QGIS „Izochrony AZO (PSP)", która
dodaje do Processing algorytm „Izochrony dojazdu (AZO)" — ta sama metoda (graf + Dijkstra + bufor)
co skrypty, ale klikalnie, z paskiem postępu i trybem jazdy alarmowej. W pełni offline, bez API.
Instalacja: Wtyczki → Zarządzaj wtyczkami → Zainstaluj z ZIP → wskaż qgis_plugin/azo_izochrony.zip.
Użycie: Processing → AZO — zabezpieczenie operacyjne → Izochrony dojazdu (AZO)
(sieć dróg z polem prędkości + punkty jednostek → poligony stref 8/15 min). Szczegóły:
qgis_plugin/azo_izochrony/README.md.
Nie chcesz uruchamiać skryptów? Te same izochrony policzysz wtyczkami. Dla PSP kluczowe są offline + własne dane + prywatność (lokalizacji jednostek i analiz nie wysyła się do zewnętrznego API).
| narzędzie | offline / prywatne | uwagi |
|---|---|---|
| QNEAT3 (wtyczka) ⭐ | ✅ tak | izochrony klikalnie na własnej sieci, interpolowane (gładsze) — patrz docs/QNEAT3_izochrony.md |
| Natywna Analiza sieciowa (wbudowana) | ✅ tak | „Obszar usługi (z warstwy)" — metoda użyta w skryptach repo, bez instalacji |
| ORS / Valhalla — self-hosted (+ wtyczka ORS Tools) | ✅ tak (lokalny serwer) | realistyczny routing pojazdu (profil ciężki driving-hgv, ograniczenia masy/wysokości); wymaga Dockera |
| pgRouting (PostGIS) | ✅ tak | pgr_drivingDistance — skala województwa, wymaga bazy |
| ⛔ ORS w chmurze / TravelTime / Mapbox / Google | ❌ nie | wysyłają współrzędne jednostek na zewnętrzny serwer — OK do demo, nie do danych służbowych |
Skrót: szybko bez instalacji → Natywna Analiza sieciowa; ładne strefy offline → QNEAT3; realistyczny wóz bojowy prywatnie → ORS/Valhalla self-hosted; skala + baza → pgRouting.
Dwie uwagi dla PSP: do celów służbowych użyj sieci BDOT10k (GUGiK) zamiast OSM, a dla wozów na sygnale podnieś prędkości projektowe (izochrona „cywilna" zaniża zasięg jazdy alarmowej).
Aby zbliżyć szkic do realnej AZO:
- Lokalizacje i gotowość jednostek — z KW/KP PSP (zamiast
amenity=fire_stationz OSM). Podmień warstwędata/fire_stations.gpkg(polekategoria:JRG/OSP-KSRG/OSP) i punkty źródłowe izochron. - Ludność — siatka GUS / BDL zamiast tagu OSM
population(dokładniejszy rozkład, nie „średnio na gminę"). - Zakłady ZDR/ZZR (Seveso) — z rejestru KW PSP / GIOŚ (OSM ich nie zawiera; na mapie A zaznaczono brak tej warstwy).
- Prędkości / czasy — dostosuj słownik prędkości i progi (8/15 min) do lokalnych realiów i norm.
- Dane OSM są niepełne i nieaktualne; w woj. śląskim OSM dał ~50 obiektów „JRG" wobec ~37 etatowych — zweryfikuj.
- Model = „czas dojazdu od najbliższej jednostki przy swobodnym ruchu". Nie uwzględnia: gotowości i obsad, jednoczesnych zdarzeń, ruchu/korków, pory doby, pogody, czasu alarmowania i dojścia poza drogą.
- Ludność przyjęta równomiernie w gminie (lokalnie zawyża/zaniża) — dla precyzji użyj siatki GUS.
- Pokrycie = zasięg po sieci dróg + bufor 250 m (uproszczenie „ostatniego odcinka").
01_fetch_osm.py pobranie OSM + budowa warstw (data/, data3857/)
02_isochrones.py izochrony: graf + Dijkstra (uruchom 2×: JRG i JRG+KSRG)
03_run_buffers.sh bufor + dissolve + reprojekcja izochron
04_build_map.py ładowanie i stylizacja warstw
docs/QNEAT3_izochrony.md izochrony bez skryptów — wtyczka QNEAT3 (dla PSP)
qgis_plugin/ wtyczka QGIS „Izochrony AZO (PSP)" + gotowy ZIP do instalacji
azo_art.qgz projekt QGIS z rycinami artykułu (layouty RYC1…RYC4)
azo_gzm.qgz projekt QGIS — demo metody (kompozycje AZO_A…D)
figury_art/ ryciny artykułu (Ryc1…Ryc4, analiza 15-min) ← w repo
data3857/ warstwy wyświetlania (EPSG:3857) ← w repo
figury/ mapy demo metody (PNG/PDF, AZO_A…D) ← w repo
data/ warstwy robocze (generowane skryptem 1) — w .gitignore
- Dane: © autorzy OpenStreetMap, na licencji ODbL (https://www.openstreetmap.org/copyright). Pobrane przez Overpass API 2026-06-20. Mapy bazowe: kafle OpenStreetMap.
- Kod (skrypty): MIT — patrz
LICENSE. - Mapy/figury: CC BY 4.0 — przy użyciu podaj: „dane © OpenStreetMap (ODbL), oprac. własne".
Pull requesty i zgłoszenia (issues) mile widziane — szczególnie adaptacje do innych województw, podstawienie danych KW PSP/GUS oraz poprawki metodyczne. Repozytorium ma charakter edukacyjny.



