Pro klienta · 2025 – dosud Projekt 3 z 20
Miletínská dopravní
Nehody, uzávěry, zásahy hasičů a počasí v Královéhradeckém kraji na jedné mapě.
Otevřít web
Ověřený stav webu: Běží, odezva 37 ms,
Ve zkratce
- Role
- Návrh, vývoj a provoz
- Období
- 2025 – dosud
- Stav
- V provozu
- Technologie
- 9 technologií
- Klient
- Miletínská dopravní
Miletínská dopravní shromažďuje na jednom místě nehody, uzávěry, zásahy hasičů a počasí v Královéhradeckém kraji. Stojí na otevřených datech státu a OpenStreetMap a většina práce je schovaná pod mapou: v převodu souřadnic, v dohledávání polohy a v tom, jak web šetří cizí služby.
Proč je to technicky zajímavé
- Jedna mapa z více zdrojů. Mapa (Leaflet nad OpenStreetMap) spojuje výjezdy z veřejného API Hasičského záchranného sboru s body přidanými v administraci a převádí je do jednoho tvaru, se kterým pracuje mapa i přehledy.
- Kamery podle kilometrovníků. Dopravní kamery ÚAMK se na mapu umisťují podle silničních kilometrovníků z OpenStreetMap, které web dohledává přes Overpass API.
- Počasí z nejbližší živé stanice. K vybrané obci web najde nejbližší automatickou stanici ČHMÚ, která právě posílá data, a ukáže poslední měření z OpenData ČHMÚ – přednostně desetiminutové, jinak hodinové.
- Administrace jako jednostránková aplikace nad vlastním API: příspěvky s editorem, zdroje, reklamní plochy, sponzoři, uživatelé a role s oprávněními pro jednotlivé akce.
Překážky a jak jsem je vyřešil
- Poledník o 17° 40′ vedle. Obce se importují z RÚIAN: skript proudově čte velký soubor VFR XML přes XMLReader a převádí souřadnice z S-JTSK (Křovákovo zobrazení) do WGS84. Převod nejdřív vracel zeměpisnou délku posunutou o rozdíl mezi ferrským a greenwichským poledníkem; oprava je popsaná přímo ve skriptu. Pořadí os navíc v datech není vždy stejné, proto skript zkusí obě varianty a vezme tu, která leží v Česku.
- Výjezdy bez polohy. Část událostí z feedu hasičů souřadnice nemá. Web je nejdřív umístí do středu obce podle vlastní tabulky z RÚIAN – rychle a bez cizích limitů – a přesnější polohu přes Nominatim dohledává jen u několika nejnovějších událostí na jeden požadavek, s dlouhou mezipamětí. Souřadnice mimo Česko nebo s prohozenými osami zahodí.
- Služby, které občas nestíhají. Overpass API při zátěži přiškrcuje provoz, proto se dotazy střídají mezi několika servery a prázdný výsledek se v mezipaměti drží jen krátce, aby výpadek nezůstal na mapě.
- Nejednotná data. Feed hasičů posílá některá pole jako text a jiná jako objekty (třeba kraj nebo okres). Normalizace je převede na jeden tvar dřív, než se dostanou k mapě.
Co není vidět
- Oprávnění u každé akce. Administrace kontroluje role a oprávnění u každého volání API, ne jen v menu, a každou změnu zapisuje do auditního záznamu.
- Ověřené spojení. Spojení s API hasičů se ověřuje proti připnutému řetězci certifikátů.
- Ohleduplnost k cizím službám. Nominatim, Overpass i ČHMÚ se volají přes mezipaměť, aby je web zbytečně nezatěžoval.
Technologie
- Nette 3 a Latte na vlastní kostře Nette Web Skeleton.
- MariaDB – příspěvky, události, uživatelé, role a auditní záznam.
- Leaflet a OpenStreetMap, Overpass API a Nominatim – mapa, kilometrovníky a geokódování.
- Otevřená data: RÚIAN, OpenData ČHMÚ a API HZS Královéhradeckého kraje.
- Quill – editor příspěvků.
Ukázky
3 snímky
Postaveno na
- PHP 8.2
- Nette
- MariaDB
- Leaflet
- OpenStreetMap
- Overpass API
- RÚIAN
- ČHMÚ OpenData
- Quill