# Veebirakendus (Liiklusatlas) ## Eesmärk Interaktiivne kaardirakendus, mis kuvab analüüsi tulemusi omavalitsustele (KOV) — müügidemo ja edaspidi iseteenindustööriist. ## Tehnoloogia - **Tagala:** FastAPI (Python), serveerib GeoJSON-e ja PDF-raportit - **Esitlus:** MapLibre GL (JS) + OpenStreetMap taustakaart - **Raport:** reportlab (A4 PDF) ## Funktsionaalsus - Valla valija (dropdown, 79 KOV-i; valmis vallad aktiivsed, teised "tulekul") - **Avalik/kaistud:** Valga avalik; Otepää/Võru/Tõrva `(kaitstud)`, lukus — **Demo-kood** sidebar-is avab need (token localStorage-s) - Kihid sisse/välja: riigiteed, kohalikud teed, liiklus (AKÖL/kaudne), väljapääsupunktid, rühmad, katastriüksused, teede omandivärv - Hüpikaknad (popup) kihi atribuutidega - Legend ja KOV-sõbralikud selgitused - PDF-raport allalaadimine valitud vallale - Referentsileht `/tutvustus` (4 demo valda, Valga avalik, teised 🔒) ## API | Endpoint | Kirjeldus | |----------|-----------| | `GET /` | kaart | | `GET /tutvustus` | referentsileht | | `GET /api/municipalities` | 79 KOV-i + staatus + access (public/protected) + kihid | | `GET /api/maps/{vald}` | valla kihtide nimekiri | | `GET /api/maps/{vald}/{layer}` | GeoJSON kiht (kaitstud vald → vajab koodi) | | `GET /api/report.pdf?vald={vald}` | PDF-raport (kaitstud vald → vajab koodi) | | `GET /api/offer.pdf` | hinnapakkumine | | `GET /health` | tervisekontroll | **Demo-kood:** `?token=` või `X-Access-Token` päis. Keskkonnamuutuja `ATLAS_ACCESS_TOKEN`. ## Kaardikihid (GeoJSON) - `boundary` — valla piir - `major_roads` — riigiteed (värvitud klassi järgi + liikluse AKÖL overlay) - `local_roads` — kohalikud teed (ühtne klassivärv + liikluse overlay) - `exit_points` — väljapääsupunktid (suurus = trips, värv = haavatavus) - `local_groups` — kohalike teede rühmad - `katastriuksused` — katastriüksused (omandipõhine värv) ## local_roads atribuudid | Atribuut | Tähendus | |----------|----------| | `group` | kohalike teede rühm (VAL_/OTE_/TOR_/VOR_) | | `exit` | parim väljapääs (gravity) | | `trips`, `trips_ads`, `trips_per_km` | päeva sõidud (kaudne + ADS) | | `omand`, `omand_kat` | omand (teeregister + kataster) | | `kasutus` | teekasutusleping (avalik/metsatee/mitteavalik) | | `is_deadend` | tupiktee (otspunkti aste = 1) | | `is_exit` | väljapääsu lõik (otspunkt riigiteel) | | `trip_length_m` | reisi pikkus väljapääsuni (BFS-puu ahel) | | `trip_kasutus` | kas reis läbib metsateed/mitteavalikku | | `is_agreement` | lepingulõike läbiv reis | ## Kihistuste loogika - **Kohalikud teed:** ühtne klassivärv `#7c8ea0`; liiklus overlay (kaudne trips) - **Riigiteed:** klassi värv; liiklus overlay (loenduse AKÖL) - **Väljapääsupunktid:** radius = trips; värv = haavatav (detour > 0 või isoleeritud + elanikud) - **Omandivärv:** eratee punane / riigitee sinine / munitsipaal roheline (katastri omand, fallback teeregister) ## Arendus ```bash PYTHONPATH=. ATLAS_ACCESS_TOKEN= .venv/bin/uvicorn liiklusatlas.server:app --port 8074 --reload ``` ## Logimine Iga `/api/maps/{vald}/{layer}` ja `/api/report.pdf` päring logitakse `data/logs/access.log` (JSONL): aeg, IP (X-Forwarded-For), vald, kiht, staatus, UA, kas koodiga. Tokenit ei logita. ## Vahemälu (cache) - **Serveripoolne:** kõik lehed/kihid/raportid saavad `Cache-Control: no-cache, no-store, must-revalidate` — brauser kontrollib iga kord uuesti, vana vahemälu ei kasutata. (Lisa: `server.py` NO_CACHE päised; rakendatud 2026-08.) - **Kasutajapoolne (kui ikka vana):** - **Ctrl+F5** / **Ctrl+Shift+R** — sunnitud värskendamine (tabaline brauser) - Private/inkognito aken — alati uus - Chrome/Edge: DevTools (F12) → Network → märgi "Disable cache" → F5 - Või: Chrome aadressiribale `chrome://settings/clearBrowserData` → "Vahemällu salvestatud pildid ja failid" ## Seos [[Liiklussageduse kaudne hindamine/04_Tehniline/Repo ja töövoog]] [[Liiklussageduse kaudne hindamine/04_Tehniline/Deploy ja infrastruktuur]]