# Rahvastiku jaotamine (OSM-hooned) ## Eesmärk Määrata igale teede sõlmele "rahvastikukoormus" — kui palju inimesi elab selle sõlme läheduses. See on liikumiste genereerimise (trip generation) aluseks. ## Meetod (alates 2026-08: OSM-hooned) ### 1. Hoonete laadimine ```python bld = ox.features_from_polygon(boundary, {"building": True}) bld = bld[bld["addr:housenumber"].notna()] # ainult aadressiga = eluruumid ``` - **Aadressiga hooned** = tegelikud eluruumid. Hõreasustuses on palju suvilaid/abihooneid (greenhouse, shed, garage...) ilma aadressita — need välistatakse. - Skript: `pipeline/building_population.py` ### 2. Kahte rahvastiku varianti Kuna üks lävi ei tööta kõigis piirkondades, arvutatakse **kaks varianti**: - **`population` / `population_addr` (konservatiivne)** — AINULT aadressiga hooned. Otepääl õige (suvilad aadressita, väldib ülehinnangut), aga Valga/Võru maapiirkondades alahindab, sest seal on palju ilma aadressita elumaju. - **`population_all` (laiapõhjaline)** — kõik elamutüübid + `building=yes` (ka ilma aadressita). Katab Valga/Võru ilma aadressita majad, aga Otepääl/Võrus võib ülehinnata (suvilad, abihooned). Iga hoone → **lähim tee sõlm** (max 300 m). Ei loeta hoonet mitu korda. ### 3. Elanike arv hoone kohta ```python PERSONS_PER_BUILDING = 2.2 # Eesti keskmine leibkond PERSONS_PER_APARTMENT = 12.0 # korterelamu ``` ### 4. Mõlema variandi ülekandmine väljapääsupunktidesse `gravity_exit_analysis.py` §9 arvutab gravity-jaotuse osakaalud (shares) **ühe korra** (ei sõltu rahvastiku suurusest) ja korrutab mõlema variandiga: - `gravity_population` / `gravity_trips` — addr variant - `gravity_population_all` / `gravity_trips_all` — all variant ### 5. Trippide genereerimine (trip generation) ```python TRIPS_PER_PERSON = 2.0 daily_trips_to_exit = population_catchment * TRIPS_PER_PERSON ``` ## Väljundid - `{prefix}_pop_node_population.csv` — sõlme-taseme rahvastik (node, population, population_addr, population_all) - `{prefix}_gravity_exit_population.csv` — väljapääsupunkti taseme (addr + all) - `{prefix}_catchment.csv` — `exit_node, population_catchment, nodes_served, ...` - `{prefix}_pop_vulnerability.csv` — rahvastikupõhine haavatavus - `{prefix}_critical_edges.csv` — kriitilised lõigud ## Veebiatlas Popup näitab mõlemat arvu, kui need erinevad: - "Elanikke (aadressiga)" — konservatiivne - "Elanikke (sh ilma aadressita)" — laiapõhjaline ## VAL_0193 näide (miks kahte varianti) Valga grupp VAL_0193 — kohalikud teeharud riigitee "Puurina" küljes. Sõlmede lähedal (≤200m) on `building=yes` hooned ilma aadressita: - `pop` (aadressiga) = 0 — Valgas on aadressikate puudulik - `pop_all` = 26.4 elanikku, 53 sõitu — maju on, need jõuavad väljapääsupunktideni See oli just juhtum, mille omavalitsus tahtis teada — laiapõhjaline variant annab sellele vastuse. ## Täpsus ja kalibreerimine (tulevikuplaan) - Aadressiga hooned × 2.2 annab valla kogurahvastiku lähedase hinnangu: Valga 17 348 vs ~16k, Otepää 6 607 vs ~6.7k, Võru 9 622 vs ~10k - `all` variant ülehinnab (suvilad): Otepää 22 714, Võru 40 579, Valga 30 895 - **Kalibreerimine:** KOV-i tegelike andmetega (rahvastikuregister, statistikaamet) kohandada elamute tuvastust pere-regioon — nt `yes`-hoonete osakaal, suvilapiirkondade eristamine. Uurimistöö järgmine samm.