04 Rahvastiku jaotamine.md 4.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. Rahvastiku variandid

Kuna üks lävi ei tööta kõigis piirkondades, arvutatakse mitu varianti:

  • population (aadressiga, PEAMINE) — AINULT aadressiga hooned. Valla tasandil kõige täpsem: Valga 17 346 vs ~16k, Otepää 6 610 vs ~6.7k, Võru 9 622 vs ~10k.
  • population_res (kombineeritud) — aadressiga + ilma aadressita building=yes hooned, kui pindala 50–200m² (EPSG:3301). Näitab ilma aadressita elamuid (nt VAL_0193), aga valla tasandil ülehinnatud (suvilad 50-200m²).
  • population_all (laiapõhjaline) — kõik elamutüübid + building=yes. Tugevalt ülehinnatud (suvilad), jääb andmetesse, mitte veebi.

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. Variantide ülekandmine väljapääsupunktidesse

gravity_exit_analysis.py §9 arvutab gravity-jaotuse osakaalud (shares) ühe korra (ei sõltu rahvastiku suurusest) ja korrutab kõigi variantidega:

  • gravity_population / gravity_trips — addr (peamine)
  • gravity_population_res / gravity_trips_res — kombineeritud
  • gravity_population_all / gravity_trips_all — laiapõhjaline

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)" — peamine, valla tasandil täpne
  • "Elanikke (sh ilma aadressita)" — kombineeritud (res)

VAL_0193 näide (miks kombineeritud)

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_res (kombineeritud) = 13.2 elanikku, 26 sõitu — maju on, need jõuavad väljapääsupunktideni

See oli just juhtum, mille omavalitsus tahtis teada — kombineeritud variant annab sellele vastuse, ilma et see moonutaks valla kogurahvastikku (erinevalt all-ist).

Valla kogurahvastik (2026-08)

Vald addr (peamine) res (kombineeritud) all (laiapõhjaline) Tegelik
Valga 17 346 23 716 30 869 ~16 000
Otepää 6 610 15 309 22 716 ~6 700
Võru 9 622 26 311 40 579 ~10 000

Järeldus: addr on valla tasandil täpseim. res näitab ilma aadressita elamuid aga ülehinnab (suvilad 50-200m²). Kalibreerimine KOV tegelike andmetega (rahvastikuregister) pere-regioon on järgmine samm — nt suvilapiirkondade eristamine asustuskonteksti järgi.

Uurimismärkused

  • Privaatsuslävi (alla 4 = 0) EI ole meie probleemi põhjus: WorldPop-i raster on dasymetriliselt määritud (murdarvulised väärtused, isegi põldudel); Statistikaamet kasutab cell key meetodit (müra 1-2 väärtustele), mitte "alla 4 = 0"
  • WorldPop ilma aadressita hoonete tuvastamiseks: VAL_0193 piirkonnas WorldPop summa ~32, res ~13-26 — mõlemad näitavad, et inimesi on, aga täpsus puudub
  • Hoone pindala on osaline eristaja: aadressiga elamutest 55% on 50-200m², aga ilma aadressita on Otepääl 7951 hoonet (enamik suvilad) — pindala üksi ei erista