Formáty kurátorovaných datových souborů
Formáty kurátorovaných datových souborů
Referenční dokumentace ručně kurátorovaných JSON souborů. Scénáře
a referenční místa čte js/app.js a validuje tools/test_model.mjs;
parkovací souhrny zpracovává tools/parkovani-oblasti.py a validuje
tools/test_parkovani.mjs.
data/parkovani-oblasti.json
Kanonický, ručně kontrolovaný vstup pro oblastní mapu parkování. Každý
záznam se spojuje s populací a geometrií přes šestimístný textový kodZsj;
pořadí záznamů se k párování nikdy nepoužívá.
{
"schemaVersion": 1,
"souhrnPublikovany": {
"mistaLegalni": 5164,
"mistaTechnicka": 7426,
"vozidlaNoc": 5340,
"vozidlaDen": 4680
},
"oblasti": [
{
"kodZsj": "009075",
"nazev": "Spořilov",
"populacniZsj": "Spořilov",
"mistaLegalni": 257,
"mistaTechnicka": 577,
"vozidlaNoc": 551,
"vozidlaDen": 387
}
],
"bezPruzkumu": [
{
"kodZsj": "009253",
"nazev": "Popovice",
"populacniZsj": "Popovice"
}
]
}
oblastiobsahují 20 souhrnných oblastí tabulky 3.1. Kapacity a vozidla jsou absolutní hodnoty průzkumu; odvozené obsazenosti se do vstupu ručně nezapisují.bezPruzkumuobsahuje zbývající čtyři ZSJ města. Generátor jim přidá populaci a geometrii, ale parkovací hodnoty ponechánull.populacniZsjje přesný název klíče vmhd-brandys/addr_pop.csv; může se lišit od krátkého názvu oblasti v analýze.souhrnPublikovanyzachovává publikované celky. Součet zaokrouhlených oblastních řádků se u počtu vozidel nepatrně liší a nesmí potichu přepsat publikovaný souhrn.spolehlivostVozidelapoznamkaDatoznačují oblasti, kde se publikovaný souhrn výrazně liší od agregace dostupných excelových průměrů. Poznámka se zobrazuje ve veřejném detailu oblasti; nejistota se tedy neztrácí při generování GeoJSONu.
Generovaný data/parkovani-oblasti.geojson rozlišuje stavDat hodnotami
zmereno, nulova_kapacita a bez_pruzkumu. Nulová kapacita s vozidly
má obsazenost null, nikoli nulu nebo nekonečno. Soubor obsahuje také
mistaNa1000, noční deficit a příznak rezidentniPriorita.
data/scenare.json
Pole objektů, každý objekt je jeden kurátorovaný dopravní scénář (typicky
uzavírka) nabízený v panelu “Scénáře” a přes URL #s=<id>.
[
{
"id": "most-svabinskeho", // string, POVINNÉ, unikátní v rámci souboru
"nazev": "Uzavírka mostu…", // string, zobrazený nadpis karty
"popis": "…", // string, volitelný, text karty
"stav": "hypoteticky", // "planovano" | "probiha" | "hypoteticky"
"termin": null, // string nebo null, volitelný termín ("🗓️ …")
"odkaz": null, // string (http/https URL) nebo null
"useky": ["26790228#30127351", …], // pole stabilních klíčů úseků, POVINNÉ
"cesty": [ // pole dvojic [odId, doId], VOLITELNÉ
["sb-namesti", "br-namesti"],
["sb-namesti", "d10-exit14"],
["zamek", "sb-namesti"]
]
}
]
Pole
id(string, povinné) – stabilní identifikátor scénáře, používá se v URL (#s=<id>) a jako React/DOM klíč karty. Musí být unikátní napříč souborem; kolize se nekontroluje automaticky, jen vizuálně (dvě karty by splynuly do stejného odkazu).nazev(string) – nadpis karty. Chybí-li,vytvorKartuScenarepoužijeidjako fallback.popis(string, volitelné) – popisný text pod nadpisem.stav(string, volitelné) – jedna zSTAVY_SCENAREvjs/app.js(planovano/probiha/hypoteticky). Neplatná/chybějící hodnota se tiše normalizuje nahypoteticky(viznormalizujStav), karta nespadne.termin(string nebonull, volitelné) – zobrazí se jako🗓️ termin, pokud je pravdivá hodnota (truthy).odkaz(string nebonull, volitelné) – odkaz na dokumentaci/úřední desku. Vykreslí se jen prohttp:/https:schéma (vizjeBezpecnyOdkaz) – jiné schéma (javascript:,data:, …) by z klikací karty udělalo vektor útoku, takže se prostě nezobrazí.useky(pole stringů, povinné z pohledu smysluplného scénáře) – klíče úseků ve tvaruklicUseku("<OSM way id>#<OSM node id prvního uzlu>", vizjs/graf.js). Při nasazení scénáře se převedou přesgraf.osmNaFeatIdna uzavírky; klíče, které v aktuální síti neexistují (přegenerovaná síť), se zahodí a v panelu se zobrazí varování (zobrazVarovaniNeznameKlice, zdroj"scenar").cesty(pole dvojic[odId, doId], volitelné) – nahradímista.vychoziCestyv panelu “Typické cesty” po dobu, kdy je scénář aktivní.odId/doIdmusí odkazovat naidzdata/mista.json– odkaz na neznáméidse ve výpočtu tiše přeskočí (spocitejCesty). Slouží k tomu, aby scénář zdůraznil právě ty trasy, které jeho uzavírka nejvíc zasáhne. Chybí-li polecesty(nebo po validaci nezbyde žádná platná dvojice), panel se vrátí na výchozí dvojice zmista.json– nezůstává viset zvýraznění předchozího scénáře (vizplatneCestyastav.cestyAktivnivjs/app.js).
Chování při chybě
- Celý soubor se nenačte / není pole → panel scénářů zůstane prázdný
(
nactiScenarevrací[]), aplikace běží dál. - Položka pole není objekt nebo nemá string
id/poleuseky→ položka se přeskočí sconsole.warn, zbytek scénářů se vykreslí normálně. - Položka pole
usekyobsahuje neznámý klíč → klíč se zahodí, zbylé klíče scénáře se uzavřou, v UI se zobrazí varování s počtem zahozených úseků. - Položka pole
cestynení dvojice dvou stringů → položka se přeskočí sconsole.warn(platneCestyvjs/app.js), zbylé platné dvojice se použijí; je-li po filtrování pole prázdné, chová se to jako bycestychybělo (fallback namista.vychoziCesty).
Konzistence se sítí (kontroluje tools/test_model.mjs)
- Všechny klíče
usekyvšech scénářů musí existovat v aktuální síti (graf.osmNaFeatId) – jinak se scénář po přegenerování sítě tiše rozsype. - Scénář
most-svabinskehomusí obsahovat přesně tytéž úseky jako bbox detekce mostu Maxe Švabinského v testu (množinová rovnost). - Scénář
prutah-stara-boleslavmusí obsahovat jen úseky tříd secondary/tertiary tvořící jeden souvislý koridor.
data/mista.json
Objekt s referenčními body dvojměstí pro UI výběr “odkud/kam” a panel “Typické cesty”.
{
"komentar": "…", // string, volný popis souboru (nečte kód)
"zdrojSouradnic": "…", // string, volný popis zdroje souřadnic (nečte kód)
"mista": [
{
"id": "br-namesti", // string, POVINNÉ, unikátní v rámci "mista"
"nazev": "Masarykovo …", // string, zobrazovaný popisek
"lon": 14.65958, // number, WGS84, POVINNÉ, konečné (finite)
"lat": 50.18596, // number, WGS84, POVINNÉ, konečné (finite)
"poznamka": "…" // string, volitelné, zdroj/ověření souřadnic
}
],
"vychoziCesty": [
["sb-namesti", "br-namesti"] // dvojice [odId, doId], id musí existovat v "mista"
]
}
Pole
mista(pole, povinné) – referenční body. Každý prvek potřebuje stringid(unikátní v rámci pole – při kolizi vyhrává poslední výskyt, protožejs/typicke-cesty.jsstavíid -> uzelmapu) a konečná číselnálon/latve stupních WGS84 (EPSG:4326).nazevje zobrazovaný popisek (fallback naid, pokud chybí);poznamkaje jen dokumentační text.vychoziCesty(pole dvojic, povinné) – výchozí nabídka tras pro panel “Typické cesty”, nahrazovanástav.cestyAktivni, pokud je aktivní scénář s vlastním polemcesty(viz výše).odId/doIdmusí odkazovat naidzmista– neznáméidse ve výpočtu tiše přeskočí.
Chování při chybě
- Soubor se nenačte / chybí
mistanebovychoziCestyjako pole →nactiMistavracínull, panel “Typické cesty” zůstane skrytý (stav.mista === null), zbytek aplikace běží dál. - Prvek
mista[i]není objekt, nemá stringid, nebo má nekonečné/chybějícílon/lat(NaN,Infinity,null, chybějící pole) → prvek se přeskočí sconsole.warn(jeValidniMistovjs/app.js), zbytek bodů se načte normálně. - Prvek
vychoziCesty[i]není pole přesně dvou stringů → prvek se přeskočí sconsole.warn(jeValidniDvojice), zbylé platné dvojice se použijí. - Dvojice odkazuje na
id, které vmistapo validaci neexistuje →spocitejCesty(js/typicke-cesty.js) tuto dvojici tiše vynechá z výsledku (žádná chyba, žádný řádek v panelu).
Testy tvaru obou souborů a robustnosti proti vadným datům jsou v
tools/test_model.mjs (sekce “robustnost vůči vadným datům” a “typické
cesty”).