04 Rahvastiku jaotamine.md 3.3 KB

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

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

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)

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.csvexit_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.