2026-08-11 — Väljapääsupunktide isoleeritud komponendi jaotus parandatud
Probleem: VAL_0101 rühm (isoleeritud komponent, 2 väljapääsu) näitas mõlemal väljapääsul "ADS aadresse 3" (kokku 6), kuigi rühmas on 5 aadressi. Põhjus: gravity_exit_analysis.py jagas isoleeritud komponendi rahvastiku võrdselt kõigi komponendi väljapääsude vahel (/ n_exits) → iga sõlme pop_ads jagunes 50/50 → mõlemale 5.5 (= 2.5 aadressi, ümardatud üles 3-ni).
Parandus: isoleeritud sõlme rahvastik omistatakse tema best_exit-ile (§5 juba arvutatud, kõik sõlmed local_nodes_reached-s). Tulemus VAL_0101:
846244516 → pop_ads=4.4 (2 aadressi)
846244647 → pop_ads=6.6 (3 aadressi)
ADS-summa konserveeritud igas vallas (Valga 9066, Otepää 6813, Tõrva 4752, Võru 12452). Vastavus _node_exit-iga (teelõigu exit, reisitee). Kõik 4 valda ümber arvutatud (gravity + export), geojson-id uuendatud, deploy ohmu + hetzner (gogs ab99ca9).
Probleem: teelõigu ads_addr oli BFS-alampuu koond (aadressid mis liiguvad läbi lõigu väljapääsuni), mitte egress. Linnagridis (Valga linn) jäid lõigud 0-ks: Talve tänava sõlmedel olid aadressid olemas, kuid BFS-puu ei jõudnud nendeni, sest tee väljapääsuni läbis teise väljapääsu sõlmi → parent=None, 11.3% ADS-rahvastikust kadus.
Lahendus (2 osa):
Egress-omistus (building_population.py): uus _assign_ads_to_segments — iga unikaalne ADS-aadress → üks teelõik (lõigu tipp lähim → sõlme incidenetsed lõigud; tipp liiga kaugel → STRtree nearest, ≤300m). Väljund: {prefix}_ads_segments.csv. Fallback katab KÕIK omistamata aadressid (KÜ-ta + KÜ-d ilma teekontaktita — linnas jookseb tee mööda kinnistu piiri). STRtree query(punkt) ei tööta (punkti bbox degenereerub) → nearest.
BFS-parandus (export_qgis.py): BFS ekspandeerib KÕIK naabersõlmed (mitte ainult sama väljapääsu), varajane lõpetus; post-order läbib kõik külastatud sõlmed (marsruudi vahesõlmed annavad 0). Kadunud sõlmede arv 0, trip_length_m kõigil lõikudel.
ads_addr lõigul = egress (sellet lõigult väljuvad aadressid). Talve lõik 2270746560–2270746562: ads_addr=4, trips_ads=17.6. Tulemused: Valga 2291/4119, Otepää 2315/3093, Tõrva 1514/2159, Võru 3950/5658 lõiku/aadressi. Popup-tekst täpsustatud ("ADS aadresse (väljub sellet lõigult)").
2026-08-09 — Linnuke: ADS-aadressidega teelõigud
Uus menüü linnuke "ADS-aadressidega teelõigud" (ads_addr_color) — kuvab lõigud, kus unikaalseid ADS-aadresse > 0.
Heleroheline (#2ecc71), kõige ülemine kiht kohalikel teedel (lisatud viimasena), menüüs viimasena.
Probleem: aadressid Marinurme ja Kungla läksid valele teelõigule. Marinurme hoone (637553,6405407) lähim sõlm 846244561 (~49m, tupik), aga aadress läks sõlmele 846244692 (~164m). Kungla hoone lähim 13645879022 (~12m, tupik), aga aadress läks 13645879020.
Põhjus:_assign_ads_unique valis lõikumispunkti (KÜ∩tee) lähima otspunkti, mitte hoonele lähima sõlme. Suur KÜ (Kungla 107275 m²) lõikub 28 teega — lõikumispunktid on hajutatud, valiti vale sõlm.
Parandus: aadress omistatakse hoonele lähimale sõlmele, mis on ühendatud KÜ-tee kontaktisõlmedega (samas kohaliku võrgustiku komponendis). Säilitab Loigu→Kungla paranduse (õige komponent), valib õige (hoonele lähima) sõlme.
Tulemus: Marinurme → 846244561 (tupik), Kungla → 13645879022 (tupik), mõlemad ads_addr=1. Valla ADS-summa püsis (Valga 9066).
Eesmärk: teelõigu popup-isse unikaalsete ADS-aadresside arv — mitu aadressi liigub läbi selle lõigu väljapääsuni. Võimaldab kontrollida kohaliku teede võrku ja tuvastada, millisele teelõigule aadressandmed käivad.
Teostus:export_qgis.py BFS-puu post-order arvutab _edge_addr_ads = lõigu valgala sõlmede unikaalsed ADS-aadressid (pop_ads / 2.2), sama all-or-nothing loogikaga nagu trips. local_roads.ads_addr.
Popup: teelõigule rida "ADS aadresse" (kui > 0).
Katvus: Valga 4370, Otepää 4320, Tõrva 2848, Võru 7692 lõiku aadressidega. Näide: ads_addr=3 ↔ trips_ads=13.2 (3 × 2.2 × 2.0 ✓).
report.py — PDF-raporti lõppu "5. Andmeallikad" jaotis (lisa small stiil)
Deploy: ohmu + hetzner (gogs a065bbe), kontrollitud kõik kolm.
2026-08-09 — Kasutuse fallback: Riigiomand (kõik klassid) → avalik
Probleem: Riigiomandistee (track, nt 846244467–846244256) oli ilma kasutuseta. Varasem fallback jättis Riigiomand + kohalik klass määramata (metsateed/RMK hüpotees), aga kasutaja loogika: riigimaa tee on avalik.
Parandus: fallback nüüd — Riigiomand (kõik klassid) → avalik, mitte ainult riigitee klassid. Lepingukihi metsatee jääb prioriteediks (kui olemas).
Tulemus: Riigiomand ilma kasutuseta = 0 kõigis valdades (Valga 6399, Otepää 3088, Tõrva 4864, Võru 16721 lõiku said avalik). Kasutaja näide 846244467–846244256: kasutus=avalik ✓, trip_kat=mitteavalik (reisi teel on eramaa mitteavalikke lõike — õige).
2026-08-09 — Popup mõisted: Lõigu kasutus vs Reisi kasutus
Küsimus: lõik 846244478–846244256 (Riigiomand, kasutus avalik) näitas "Reisi kasutus: mitteavalik".
Selgitus:Lõigu kasutus on konkreetse lõigu oma (Riigiomand → avalik ✓). Reisi kasutus (kogu teel) on koond kogu reisitee kohta väljapääsuni — 1671m reis kulgeb läbi eramaal asuva lõigu (846244411–846244439 jt, Eraomand → mitteavalik). Mõisted on erinevad: üks on selle lõigu oma, teine kogu reisi tee.
2026-08-09 — Kasutuse fallback: Eraomand → mitteavalik
Parandus: kui teel on omand_kat=Eraomand (eratee) ja kasutus puudub → mitteavalik. Eeldus: kui registrisse ilmub hiljem "avalik" märge, muudab andmevärskendus selle automaatselt.
Fallback loogika (lõplik):
Munitsipaalomand → avalik
Riigiomand + riigitee klass → avalik
Eraomand → mitteavalik
Riigiomand + kohalik klass (track/unclassified) → määramata (metsateed/RMK)
Omandiks omand_kat, fallback omand (teeregister) kui kataster puudub
omand_kat=None kontroll: Valga 4, Otepää 74, Tõrva 4, Võru 0 lõiku (kõik ilma omandita — jäävad määramata). Need on valdavalt riigimaa kohalikud teed.
Reisi kasutus (trip_kat) arvutatud fallbacki järel: Valga mitteavalik 24909, avalik 11081, metsatee 5175.
2026-08-09 — Kasutuse fallback omandi järgi (munitsipaalomand → avalik)
Probleem: tee 11844603940–11844603939 (Munitsipaalomand) oli ilma kasutusotstarbeta — kasutus/trip_kat/trip_kasutus määramata. Põhjus: kasutus tuli ainult teeregistri lepingukihist, mis ei katanud kõiki teid. 5513 munitsipaalomandiga lõiku (54%) jäid ilma.
Parandus (export_qgis.py): kasutuse fallback omandi järgi (kui leping puudub):
Munitsipaalomand → avalik (KOV teed on avaliku kasutusega)
Riigiomand + riigitee klass (trunk/primary/secondary/tertiary) → avalik (riigimaanteed avalikud)
Riigiomand + kohalik klass (track/unclassified) → ei puutu (metsateed/RMK)
Reisikoondi arvutus liigutati pärast omand_kat sidumist ja fallbacki — kasutab uuendatud kasutust.
Tulemus: kõik munitsipaalomandisteed kasutusega (0 ilma). Valga: local 5513 + major 4728 lõiku said "avalik". Kasutaja näide nüüd kasutus=avalik, trip_kat=avalik.
Probleem: lõik 869309244–2393808303 (VAL_0009) näitas märkeid "väljapääsu lõik, tupik" korraga. Põhjus: is_deadend loogika luges riigitee ristmiku otsa (degree 1 kohalikus graafis) tupikuks, kuigi tee jätkub riigiteele.
Parandus:is_deadend = otspunkt degree 1 JA ei ole väljapääs (riigitee sõlm). Tulemus: Valga 4246→2388 tupikut, kasutaja näide nüüd deadend=0, exit=1 (õige). Jäänud 66 deadend+exit on lühikesed oksad (8-176m), kus üks ots riigiteel ja teine tupik — loogiline.
Uus linnuke "Reisitee kasutus (värv)": overlay-kiht trip_color värvib kohalikud teed reisitee kasutuse koondkategooria (trip_kat) järgi — avalik roheline, metsatee oranž, mitteavalik punane (sarnaselt omandivärvile). Legend uuendatud.
trip_kat tuletus: reisi kasutuskoondist; nullipikkuse reisiga lõikudele (väljapääsu lõik ise) kasutatakse lõigu enda kasutust — mõlemad suunad ühtsed.
trip_kat jaotus (Valga): avalik 19763, mitteavalik 7646, metsatee 6200.
Probleem: kohaliku tee popup-i all oli jäänuk "— reisiteel on metsatee/piiratud kasutusega" iga trip_kasutus olemasolu korral — isegi siis, kui reisiteel oli ainult "avalik" (nt ID 12065213289–12065213290, trip_kasutus="avalik" näitas valet metsatee/mitteavalik märkust).
Parandus:tripNote muutuja eemaldatud popup-ist. "Reisiteel kasutus" rida juba näitab konkreetset väärtust — lisamärkus oli lohakas ja vale igale juhule.
Küsimus: kas Riigiteede liiklus (AKÖL) ja Kohalik liiklus (kaudne) annavad ainult värvi või mõjutavad popup infot.
Analüüs: overlay-kihid (major_traffic/local_traffic) kasutavad sama allikat kui põhiteed (addTrafficOverlay), ainult eri värviga. Popup info (akol/trips) tuleb põhikihtidelt major_roads/local_roads (alati atribuutidena). pickFeature prioriteediloendis on põhiteed, seega tavaliselt näitab popup õiget teed.
Puudus leitud: kui põhitee on välja lülitatud aga liikluskiht peal, tabab klikk overlay-kihti → POPUPS-is puudub → tühi popup.
Parandus (openPopup): overlay-kihtide (major_traffic/local_traffic/omand_color/omand_color_major) popup kasutab põhitee popup-i (sama allikas = samad atribuudid). Nüüd töötab ka põhitee väljalülitatuna.
2026-08-09 — Popup mõistete täpsustus + Väljapääs (ID)
Popup täiendus (local_roads): lisatud rida "Väljapääs (ID)" (exit = lähim väljapääsupunkt, kohaliku tee + riigitee ristmik) reisi pikkuse kõrvale — et tuvastada, millise väljapääsupunktini reis kulgeb.
Mõistete täpsustus:
"Reis läbib" → "Reisiteel kasutus": loetelu teekasutuslepingu režiimidest (avalik/metsatee/mitteavalik) reisi teel väljapääsuni. Näide "metsatee,mitteavalik" = reis kulgeb läbi metsatee- ja piiratud kasutusega lõikude.
"Reisi pikkus" → "Reisi pikkus väljapääsuni" (selgem).
"Märked: läbib lepingulõike" (is_agreement) eemaldatud — oli ülearune: koodis is_agreement = int(bool(_kas_vals)) ja trip_kasutus täidetud samal tingimusel (kontroll: 0 erinevust 42090 lõigust). Popup näitab nüüd ainult trip_kasutus (konkreetne info).
Sidebar-i "Mida siin näed?" selgitus täiendatud uute mõistetega.
2026-08-09 — simplify=False: degree-2 sõlmed eraldi lõikudeks
Probleem: OSMnx vaikimisi simplify=True liidab degree-2 vahesõlmed üheks servaks. Tee 13645879022–13645879019 (100m, OSM-is 4 node: 22→21→20→19) kuvati 1 lõiguna, mistõttu is_deadend/is_exit märked olid valed (kogu lõik sai mõlemad, kuigi tupik on ainult ots 22 ja väljapääs ainult ots 19).
Parandus: kõik graafi laadimised (export_qgis, gravity, building_population, valga_analysis, valga_population_analysis) nüüd simplify=False — iga degree-2 sõlm oma lõiguna.
Gravity optimeerimine:exit_distances arvutati kõigi ~2000 exit-i vahel (aeglane, Võru 40+ min). Kuna gravity jaotus kehtib ainult põhikomponendis, arvutatakse nüüd ainult main-exitide (~21-71) vahel → 40 min → ~1 min.
Probleem: tabaline brauser näitas vanu popup-andmeid, kuigi private-brauser oli korras. Põhjus: FastAPI serveeris index.html/GeoJSON-id ETag/Last-Modified vahemäluga, brauser ei küsinud uuesti.
Parandus (server.py): kõik lehed (/, /tutvustus), kihtide geojson-id, PDF-raport ja hinnapakkumine saavad Cache-Control: no-cache, no-store, must-revalidate — brauser kontrollib alati uuesti.
Reisitee (trip_length_m) — BFS-puu vanemate ahela pikkus lõiguni väljapääsust. Kõik 6779 lõiku.
Reisi kasutuskoond (trip_kasutus, is_agreement) — kas reis väljapääsuni läbib metsateed/mitteavalikku (teekasutuslepingu loogika). Valga: 3088 lõiku läbib lepingulõike.
ADS aadress-kinnistu link (ads_ky veerg node_population.csv-s) — aadressi KÜ tunnus sõlme kohta (853/3693 Valgas).
Popup täiendus: local_roads näitab "Reis läbib", "Reisi pikkus", "Märked (tupik/väljapääs/leping)".
Tulemused (is_agreement): Valga 3088, Otepää 3094, Tõrva 3862, Võru 6761 lõiku.
_check_access: avalikud vallad vabalt; kaitstud nõuavad koodi (?token= või X-Access-Token päis), muidu 403
Kaitse endpoiintidel: /api/maps/{vald}, /api/maps/{vald}/{layer}, /api/report.pdf
Logimine: iga andmepäring data/logs/access.log (JSONL): aeg, IP (X-Forwarded-For), vald, kiht, staatus, UA, kas koodiga. Tokenit ennast ei logita.
Frontend: rippmenüüs kaitstud vallad (kaitstud), lukustatud; sidebar-is "Demo-kood" sisend — õige kood avab need (token localStorage-s). Tutvustusleht: Valga avalik, teised kaitstud 🔒.
Test: Valga 200 ilma koodita, Otepää/Võru/Tõrva 403 ilma / 200 koodiga (mõlemas serveris).
Tõrva vald analüüsitud täisahelaga: ADS hooned + KÜ + kataster (7610 KÜ) + building_population (kalibreeritud 5 777) + gravity + export + preprocess.
Tulemused: 861 väljapääsupunkti, 5 370 kohalikku lõiku, 67 kriitilist lõiku, lõksus 299. Rahvastiku variandid: addr 6 004, res 7 386, ads 4 679. Peamine kalibreeritud = 5 777 (täpne).
Parandus report.py: tolerantne puuduvatele joonistele (overview/pop_analysis) — Tõrva raport ei kukuks, kui joonis puudub. torva_overview.png loodi valga_analysis.py refined-fallbakiga.
Tõrva on nüüd 4. valmis vald atlases (Valga, Otepää, Võru, Tõrva). Deploy: ohmu + hetzner (gogs 512354b), raport 1354984 bytes mõlemas.
Probleem:res-variant (aadressiga + ilma aadressita yes-hooned 50–200 m²) ülehinnas Otepääl/Võrus (suvilad kuurort/metsas): res = 15 308 / 26 311 vs tegelik 6 225 / 10 310.
Parandus:building_population.py — ilma aadressita yes-hoone loetakse elamuks vaid siis, kui see asub aadressiga elamu lähedal (≤300 m, asustuskontekst: küla/taluõu). Üksikult metsas asuvad suvilad välistatakse (cKDTree kauguskontroll).
Tulemused:
| Vald | res enne | res pärast | mõju |
|------|----------|-----------|------|
| Valga | 23 732 | 18 738 | −21% (aadressikate puudulik — ilma aadressita elamud säilivad) |
| Otepää | 15 308 | 9 383 | −39% |
| Võru | 26 311 | 14 845 | −44% |
Valga res-extra (ilma aadressita elamud küla juures): 6 384 → 1 393. Peamine population on endiselt kalibreeritud ametliku arvuga (Valga 14 813, Otepää 6 225, Võru 10 310).
Probleem: Otepää vallas Kesknurme/Karumäe kinnistutele klõpsates näitas popup "Otepää vald" (valla piir), mitte katastri infot. Paljudel teistel kinnistutel näitas õigesti.
Uurimine: andmetes oli kinnistutel info olemas (Eraomand, sihtotstarve). Põhjus veebirakenduses: CLICK_PRIORITY loendist puudus katastriuksused — kinnistul, kus pole teed/väljapääsu, langes pickFeature fallbackina feats[0]-le (suur boundary polügoon → "Otepää vald"). Teedega kinnistud näitasid õigesti, sest teed on prioriteedis enne boundary'd.
Parandus:web/index.html — CLICK_PRIORITY lisatud katastriuksused enne boundary. Image rebuild mõlemas serveris (koodimuudatus), deploy ohmu + hetzner (gogs 931097d).
Kõrvalleid: valla bbox-filtrisse jääb 1043 teiste valdade kinnistut (valla piiri välised) — teadmiseks, ei muudetud.
2026-08-06 — Omandi sidumine kõigi katastriüksustega (eramaa kajastub)
Probleem: kasutaja märkas, et tee 10103476998–10103490195 (Otepää, track) all olev maa on eramaa (Kalda, KÜ 60802:002:1030, Eraomand), aga see ei kajastu katastriinfos. Ka teistel erateedel puudus katastriomand.
Uurimine: tee kulgeb 423 m üle Kalda eramaa (MAATULUNDUSMAA) ja 39 m üle TRANSPORDIMAA (Priipalu-Kuigatsi tee). Otepääl oli 1058 lõiku teeregistri omand=Eraomand aga omand_kat=None — põhjus: export_qgis.py sidus omandi ainult TRANSPORDIMAA sihtotstarbega katastriüksustelt, eramaa (teed ümbritsevad KÜ-d) jäi arvestamata.
Parandus (export_qgis.py §4):
Omandi sidumine nüüd kõikidest katastriüksustest (mitte ainult TRANSPORDIMAA) — teede all olev eramaa kajastub.
Omand valitakse lõikumispikkuse summa järgi (levinum/tegelik osa), mitte KÜ-de arvu loenduse järgi. Kuna sjoin lähtestab indeksi, säilitatakse algne indeks _oid veeruna (samuti teeregistri omandi sidumises — oli sama indeksi viga).
Tulemus: Kalda tee mõlemad suunad nüüd omand_kat=Eraomand (eramaa). Otepää: Eraomand 5001 lõiku, Munitsipaalomand 1545, Riigiomand 451. Kõigil 3 valla teedel on nüüd katastriomand (varasem omand_kat=None kadus).
Obsidian:Doktoritöö/Liiklussageduse kaudne hindamine/ loodud — struktureeritud märkmed metoodika ja tulemuste kohta
Parandused (veebiatlas): valla-spetsiifilised rühmakoodid (VAL_, OTE_, VOR_ — mitte VLG_), _pop_ failinimede ühtlustamine (population kirjutas {prefix}_catchment.csv, tarbijad otsisid {prefix}_pop_catchment.csv → väljapääsupunktide andmed puudusid Otepääl/Võrus), popup-id näitavad õiget valla nime + null-kaitse
Ühtne gravitatsioonipõhine süsteem: väljapääsupunktide rahvastik/liikumised arvutatakse nüüd gravitatsioonimudeliga (mitte ainult lähim-jaotusega):
valga_population_analysis.py kirjutab {prefix}_pop_node_population.csv (sõlme-taseme rahvastik)
gravity_exit_analysis.py §9 loeb selle, liidab iga sõlme rahvastiku selle gravitatsioonipõhise parima väljapääsupunkti alla → {prefix}_gravity_exit_population.csv (gravity_population, gravity_trips, nearest_population võrdluseks)
export_qgis.py määrab pop_catch/daily_trips gravitatsiooniväärtustega
Popup näitab "Elanikke (gravitatsioon)" + lähim-jaotuse võrdluse
Tulemus: suuremad keskused tõmbavad rahvastikku (nt Valga suurim väljapääs: gravity 1 682 vs nearest 83)
Pehme gravity-jaotus (nulli parandus): hard-assignment (iga sõlm AINULT parimasse väljapääsu) jättis väiksed põhikomponendi punktid tühjaks (Valga 57/71, Otepää 27/28, Võru 28/36 pop=0). Asendatud probabilistliku jaotusega:
weight(e) = (pop_e + 1) / (impédance/1000)² — iga sõlme rahvastik jaotatakse kõigi väljapääsupunktide vahel proportsionaalselt
Nüüd kõik põhikomponendi punktid saavad mitte-null gravity-rahvastiku
ID-d popupides: teedel osm_u–osm_v, väljapääsupunktidel id (exit_node) — vigade kontrollimiseks
OSM-hooned rahvastiku proksina (WorldPop asendus): WorldPop-i 5 km omistamisraadius "imeb" linna rahvastikku põlluteede sõlmedesse (Otepää sõlm 281707587 sai 40.5 elanikku, kuigi teedegrupil OTE_0141 pole maju). Uus meetod:
pipeline/building_population.py — aadressiga hooned (eluruumid) → lähim tee sõlm (max 300 m), 2.2 inimest/hoone, korterelamu 12
Valla kogurahvastik realistlik: Valga 17 348, Otepää 6 607, Võru 9 622
Kahte rahvastiku varianti (VAL_0193 juhtum): Valga grupp VAL_0193 (teeharud riigitee "Puurina" küljes) — sõlmede lähedal building=yes hooned ilma aadressita:
pop (aadressiga) = 0 — Valgas aadressikate puudulik
pop_all = 26.4 elanikku, 53 sõitu
Lahendus: arvutatakse mõlemad variandid läbi kogu ahela (building_population → gravity shares → export → veeb). Popup näitab mõlemat, kui erinevad.
Tulemused: Valga addr 17 348 / all 30 895; Otepää 6 607 / 22 714; Võru 9 622 / 40 579
Kalibreerimine KOV tegelike andmetega on järgmine samm (all ülehinnab suvilate tõttu, addr alahindab ilma aadressita maju)
Kombineeritud rahvastik (res): aadressiga + ilma aadressita building=yes hooned 50–200m² (EPSG:3301 pindala). Kuna all on tugevalt ülehinnatud ja addr on valla tasandil täpseim:
Popup: "Elanikke (aadressiga)" peamine + "Elanikke (sh ilma aadressita)" (res) lisainfo
VAL_0193: addr=0, res=13.2 elanikku/26 sõitu — ilma aadressita elamud kaetud
Valla kogurahvastik: Valga addr 17 346 / res 23 716; Otepää 6 610 / 15 309; Võru 9 622 / 26 311
Uurimismärkus: privaatsuslävi (alla 4=0) EI ole põhjus — WorldPop on määritud, Statistikaamet kasutab cell key't. Otepääl on 7951 ilma aadressita hoonet (suvilad) — pindala üksi ei erista; asustuskonteksti kalibreerimine KOV andmetega on tuleviku samm
ADS-i (riiklik aadressiregister) integreerimine:pipeline/ads_buildings.py laeb Maa- ja Ruumiameti ADS-i WFS-ist (aks.geoportaal.ee/aks-ogc, kiht ads_hoone_a) kõik valla hooned — kõik aadressiga (Valga 17 452 vs OSM 14 728):
population_ads = ADS-i hooned (võrdluseks, ülehinnatud — kõrvalhooned/suvilad)
Peamiseks jääb OSM-addr (valla tasandil täpne: Valga 17 346, Otepää 6 610, Võru 9 622)
VAL_0193: OSM-addr 0, ADS 22 — riiklik register kinnitab maju; popup näitab "ADS (kõik hooned)" võrdluseks
Uurimine: 96% OSM aadressita hoonetest <100m ADS-hoonest; EHR-i sihtotstarve (ehr_kood) on tuleviku täpsustus eluhoonete eristamiseks
ADS-i parandus (unikaalsed aadressid): VAL_0193 väljapääsupunktide ümber oli ADS-is 22 hoonet, aga ainult ~5 unikaalset aadressi (taluõus elamu + mitu kõrvalhoonet samal aadressil). Aadress on liikumiste aluseks, mitte hoonete arv. Parandus: _assign_unique loeb iga sõlme jaoks unikaalseid aadresse. Tulemus: VAL_0193 ADS 22 → 4.4 elanikku; Valga ADS 25 562 → 13 031; Otepää 20 165 → 9 910; Võru 37 450 → 17 304
Kalibreerimine Rahvastikuregistri ametliku rahvaarvuga: kasutaja idee "elanikud proportsionaalselt eluruumi aadressidele" rakendatud:
--official-pop parameeter building_population.py-s; skaala = ametlik / OSM-addr hooned
Ametlikud arvud: Valga 14 813, Otepää 6 225, Tõrva 5 777 (2026), Võru 10 310 (2024)
Tulemus: valla kogurahvastik = ametlik arv, jaotus proportsionaalne aadressitihedusega
Uuritud ametlikku rahvastikuinfot: Statistikaamet RV0291U (valla rahvaarv), REL2021 "Leibkonnad ja perekonnad". Leibkonnad ja ruutstatistika (1km/100m) on tulevikuplaan — leibkonna-põhine liikumine (kogu pere sõidab koos linna) on teaduslikult põhjendatud lähenemine
Arenduse töövoog: kogu skriptide käitamine ja testimine toimub ohmu-l (võimas arvuti), chat käib lokaalselt; ohmu-l tehtud muudatused jõuavad Syncthing-iga tagasi lokaalsesse git-reposse
Tehtud otsused ja õppetunnid
Väljundi asukoht: pipeline skriptid peavad kirjutama liiklussagedus/results/, sest preprocess_web.py otsib sealt — kinnitada --results-dir igas etapis
Failinimede konventsioon:valga_population_analysis.py kirjutab {prefix}_pop_*.csv (prefiks saab _pop-lõpu), gravity/export otsivad sama mustrit. Valga töötas juhuslikult (ajalooline prefiks valga_pop); ühtlustada uute valdadega
gpkg-otsing:preprocess_web.py leidis voru_qgis.gpkg ka voru-linn jaoks — klapp ainult täpse nimega + -vald sufiksi erandiga, mitte -linn päisega
WorldPop alahindab hõreasustust: elanike arv catchment'is on tunduvalt väiksem tegelikust — vajab validatsiooni/kalibreerimist
Gravitatsioon switched = 0: madala tihedusega valdades ei muuda gravitatsioonikorrektsioon valikuid — tuleb uurida, kas alpha on liiga väike või on see geograafiline reaalsus
AAAA kirje: ei tohi lisada, kui server kuulab ainult IPv4-l
Tuleviku sammud
Teaduskirjanduse kogumine (n8n)
Valideerimine riigiteede loendustega
Põhiartikli koostamine (3 valda)
Müügipaketi ettevalmistus
Katastriüksuse (KÜ) põhine ADS-omistamine: kasutaja idee aadress kanname sellele teedevõrgule, kus kataster teega kokku puutub, mitte kauguse järgi rakendatud:
Uus pipeline/ads_ky.py — AKS WFS kiht aks:ads_ky (KÜ tunnus orig_tunnus, taisaadress), sama teenus mis ADS-hooned
Lahendas Loigu juhtumi: elamu 356m teest, aga KÜ puutub teega → aadress jõuab õigele väljapääsule
Tulemused (üks aadress = üks kord): Valga 12 438, Otepää 9 163, Võru 15 607 (varem 13 031 / 9 910 / 17 304)
ADS-i täpsusparandused (2026-08, teine voor):
KÜ-tee otspunkti omistamine: aadress omistatakse lõikuva tee otspunktile (u/v), mitte geomeetriliselt lähimale suvalisele sõlmele. Parandas 73 valet omistust — nt Loigu (KÜ 0740) läks ekslikult Kungla sõlmele 13645879022, väljapääs näitas 4.4. Nüüd läheb Loigu õigesse komponenti (846244516), Kungla väljapääs 13645879019 näitab 2.2 (1 talu).
EE+ehr filter: loendatakse AINULT ehitisregistris olevad elamud (adob_liik=EE JA ehr_kood olemas). Välistab mitteeluruumid (kirik, laut, ait, suvila) — Valga 1 289 aadressi.
Tulemused (ADS, EE+ehr + KÜ): Valga 8 978, Otepää 6 733, Võru 12 044 (varem 12 438 / 9 163 / 15 607)
ADS-i topeltloenduse parandus (2026-08): kasutaja märkas, et VAL_0193/VAL_0532 piirkonnas on ADS-arvud kahtlased. Uurimine: isoleeritud komponendi 2 väljapääsu (846244516, 846244647) poolitamine 5.5+5.5 on õige (kogusumma 11.0 = 5 aadressi, mõlemad legitiimsed väljapääsud). AGA leiti tõeline topeltloendus: _unique_addrs fallback luges ühte aadressi mitu korda, kui selle hooned olid eri sõlmede lähedal (nt Männi tn 5 4×). Parandus: üks aadress = lähim sõlm + globaalne dedup. Mõju: Valga 8 978→8 956, Otepää 6 733→6 720, Võru 12 044→12 039.
Dev/prod andmelõhe parandus (2026-08): ohmu dev-server näitas vanu andmeid (13645879019: pop_ads 4.4), prod uusi (2.2). Põhjus: andmed on image'i sees ja docker-compose up -d ilma --build-ita ei ehitanud uuesti. Lahendus: data/ bind-mount mõlemas serveris (./data:/app/liiklusatlas/data) — uuendamisel piisab git pull + restart. README uuendatud. Kasutaja kinnitas, et 2.2 el + 4.4 sõitu (Kungla) on õige loogika (ei muudeta 1 sõiduks).
Popup täiendus (2026-08): väljapääsupunkti popup näitab nüüd eraldi "ADS aadresse" (aadresside arv = pop_ads/2.2) ja "ADS elanikke" (pop_ads, 1 kümnendkoht + sõidud). Varem näitas ühte ümardatud arvu ("ADS (aadressid): 2"), mis oli eksitav — 1 aadress andis 2 (ümardatud 2.2 elanikku). Nüüd: Kungla ID 13645879019 → "ADS aadresse: 1, ADS elanikke: 2.2 (4 sõitu)" — võimaldab kontrollida aadresside/eluruumide arvu.
Kriitilised teelõigud uue meetodiga: gravity_exit_analysis.py arvutab nüüd sild-servad (nx.bridges) ja lõksus jääva rahvastiku — eraldi veerud trapped_population (kalibreeritud) ja trapped_ads (ADS EE+ehr). CSV: {prefix}_pop_critical_edges.csv, joonis {prefix}_critical_edges.png (kaart + tulpdiagramm). Tulemused: Valga 194 lõiku (lõksus 1638 / ADS 557), Otepää 58 (458/147), Võru 159 (1127/730).
report.py üldistamine: prefiksipõhine, lisatud kokkuvõtteleht (rahvaarv kalibreeritud, väljapääsud, ADS, kriitilised lõigud) + ADS-veerg tabelis. Kokkuvõte kasutab kalibreeritud gravity_andmeid (14 814).
Hinnapakkumise mall: uus pipeline/offer.py → data/report/hinnapakkumine.pdf, serveeritakse /api/offer.pdf. 07_Müük uuendatud.
Kõik 3 valla raportid + hinnapakkumine saadaval atlas.see1.ee/api/report.pdf?vald=... ja /api/offer.pdf
Raporti failinimed valla prefiksiga (2026-08): data/report/{vald}/ kaustades olid kõik failid valga_* nimega (preprocessweb.py standardiseeris valga* alla). Parandus: failid on nüüd {prefix}_* (nt otepaa_overview.png, voru_pop_critical_edges.csv), report.py tuletab prefiksi raporti kausta nimest (_prefix_for). Dev/prod ühtsed, kõik 3 valla raportid genereeruvad.
Valideerimine 2025. aasta riigiteede loendustega (2026-08):
Laeti Transpordiameti 2025. aasta liiklusloendus (4564 homogeenset lõiku, AKÖL)
Sidumine: väljapääsupunkt ↔ lähim riigitee serv (ref) + piki-tee kaugus → õige loenduslõik
Kohalikud teed: igale lõigule lisatud kaudne koormus (exit_trips = tema parima väljapääsu päeva sõidud, trips_per_km) — värv/laius trips järgi (hõre → tihe)
Riigiteed: igale lõigule lisatud loenduse AKÖL (ref-matching loendus_2025.csv-ga) — värv loenduse järgi (hõre → tihe), popup näitab sõidukit/ööp
Legend uuendatud: "Riigiteed (loendus)" + "Kohalikud teed (kaudne koormus)"
Katvus: Valga 5215/6779 local lõiku trips-iga, 2255/2477 major lõiku AKÖL-iga; Otepää/Võru analoogselt
Liiklusvisualiseerimise parandus (2026-08): kasutaja märkas, et uus värviskeem "kustutas" hõredad teed (helehall valgel taustal). Parandus: taastati algne tee-värviskeem (riigiteed klassi järgi, kohalikud teed impedantsi järgi) — teed jäävad alati nähtavaks. Liiklus kuvatakse nüüd overlay-kihina tee peal (local_traffic/major_traffic): riigiteedel loenduse AKÖL (sinine kate), kohalikel teedel kaudne trips (punane kate). Legend ja checkboxid uuendatud. Andmed (trips/akol atribuudid) on tee kihis olemas ja popup näitab neid.
Lõigukoormuse parandus (all-or-nothing, 2026-08): kasutaja märkas, et VAL_0032 ja VAL_0039 näitasid kaardil suurt 'päeva sõidu' arvu. Uurimine: export_qgis.py omistas igale kohaliku tee lõigule KOGU väljapääsupunkti trips-arvu (nt 174), mitte proportsionaalset osa → 134× üleloendus. Parandus: iga lõigu koormus = nende sõlmede trips-arv, kelle teekond väljapääsuni läbib just seda lõiku (BFS-puu, post-order summa). Tulemus: VAL_0032 → 0 (tööstusala, elanikke pole), VAL_0039 (Sireli/Looduse elamutänavad) → max 34 trips; Valga lõikude summa 29 993 ≈ väljapääsupunktide 29 632. Suurimad koormused nüüd elamutänavatel (Herne 192, Heina 154, Koidu 139).
Major_roads värvisüsteemi parandus (2026-08): kasutaja märkas, et kolm secondary teed (Otepää) on eri värvi — punane, lilla, kollane. Uurimine: (1) 281701578–281864449 on secondary_link, mis polnud match-loendis → langes fallback-värvile #e91e63 (punane); (2) 281726553–2629675775 (secondary, AKÖL 1426) sai sinise major_traffic overlay-katte, mis segunes kollase baasvärviga lillaks. Parandus: (1) lisatud kõik *_link tüübid baasklassi värvi alla (secondary_link→#ffb74d jne), (2) major_traffic ja local_traffic overlay'd nüüd solid-värvid (läbipaistmatud), mis asendavad baasvärvi, mitte ei segune. Iga riigitee on nüüd kas klassivärvi või liiklusvärvi, ühtne loogika.
Linnukeste + omandivärvi parandus (2026-08): (1) linnukesed ei töötanud alglaadimisel — loadMunicipality lisas kihid ilma checkboxi olekut arvestamata (nt Kohalike teede rühmad märkimata aga kuvati). Lisatud applyCheckboxes(), mis rakendab checkboxi oleku pärast kihi lisamist. (2) OTE_0005 lõik 11149625980–415514401 jäi ilma omandivärvita: asub MAATULUNDUSMAA katastriüksusel (Aakre metskond 49), mitte TRANSPORDIMAA-l → omand_kat=None. Parandus: omandivärv kasutab omand_kat fallbackiga omand (teeregister) → nüüd Riigiomand sinine. Otepääl 1228 lõiku said nii värvikatte.
Haavatavusanalüüs kõikidele väljapääsupunktidele (2026-08): varem hõlmas haavatavusanalüüs ainult TOP 30 WorldPop-põhist väljapääsu (pop_pop_vulnerability.csv vanast valga_population_analysis.py-st), ülejäänud kuvati 'tavalistena'. Parandus: (1) gravity_exit_analysis.py arvutab nüüd haavatavuse kõikidele põhikomponendi väljapääsudele kalibreeritud rahvaarvuga (Dijkstra detour); (2) isoleeritud komponendid elanikega (ainus väljapääs — lõksu jäämine) märgitakse samuti haavatavaks. Kaart: haavatav punane (detour>0 või isoleeritud+pop). Tulemused: Valga 71 detour + 356 isoleeritud+pop = 427/1048 haavatavat; Otepää 28+466=494/1123; Võru 36+707=743/2007.
Menüü kihtide eraldamine (2026-08): "Riigiteed (maantee-klass)" ja "Kohalikud teed" on nüüd omaette linnukesed, mis kuvavad ainult klassivärvi (ilma liikluseta). Liiklus on eraldi linnukestega: "Riigiteede liiklus (AKÖL)" ja "Kohalik liiklus (kaudne)", vaikimisi välja lülitatud. Legendi värvid vastavad solid-värvidele.
Kohalikud teed ühtne klassivärv (2026-08): kasutaja märkas, et kolm kohalikku teed (Otepää OTE_0011) olid erinevat värvi — põhjus: local_roads põhivärv kasutas impedance (kaugus väljapääsuni) gradienti (0→#f6c177, 40+→#b4637a). Parandus: kõik kohalikud teed on nüüd ühtset värvi #f6c177; impedance jääb andmetesse/popup-i, ei määra enam värvi. Liiklus (local_traffic) jääb eraldi linnukese taha.
Riigiteede ja kohalike teede värvide eristamine (2026-08): kohalikud teed olid oranžid (#f6c177), mis sarnanesid riigiteede sekundaar/tersiaalsete värvidega (#ffb74d/#ffd54f). Muudetud kohalikud teed sinakashalliks (#7c8ea0) — selgelt eristuvad. Menüüsse lisatud värvitähised iga linnukese ette (samad värvid kui kaardil).