# 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. Rahvastiku variandid

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

- **`population` (PEAMINE, kalibreeritud)** — OSM aadressiga hooned, skaleeritud **Rahvastikuregistri ametliku valla rahvaarvuga**:
  ```
  skaala = ametlik_rahvaarv / valla_OSM-addr_hoonete_arv
  ```
  Elanikud jaotatakse proportsionaalselt eluruumi aadressidele — valla kogusumma = ametlik arv. Valga 14 813, Otepää 6 225, Võru 10 310 (ametlikud).
- **`population_ads` (ADS, võrdluseks)** — riikliku aadressiregistri (ADS) hooned, **deduplikeeritud unikaalse aadressi järgi**. Mitu hoonet samal aadressil (taluõu: elamu + kuur + ait) = **üks eluruum** (leibkond). Näitab, kus on maju, mida OSM-il pole (nt VAL_0193: OSM-addr 0, ADS 4.4 = 2 aadressi). **Omistamine katastriüksuse (KÜ) kaudu** — vaata allpool.
- **`population_res` (kombineeritud)** — OSM aadressiga + ilma aadressita `building=yes` hooned 50–200m².
- **`population_all` (laiapõhjaline)** — kõik OSM elamutüübid + `building=yes`. Tugevalt ülehinnatud.

Iga hoone → **lähim tee sõlm** (max 300 m). Ei loeta hoonet mitu korda. ADS-i puhul loetakse **unikaalseid aadresse**, mitte hoonete arvu.

### ADS-i omistamine katastriüksuse (KÜ) kaudu

ADS-i hoonete omistamine teedevõrgule kasutab **katastriüksuse (KÜ) piiri** (`aks:ads_ky`, sama AKS-teenus):

1. Iga ADS-hoone → tema **katastriüksus** (ruumiline ühendus: hoone KÜ polügoonis).
2. Iga KÜ → **lõikumispunkt(id) kohaliku teedevõrguga** (spatial join).
3. KUI KÜ puutub teega kokku → omistatakse KÜ kõik unikaalsed aadressid **lõikumiskoha lähimale sõlmele** — juurdepääs maale on seal, kus KÜ teed kohtab.
4. MUIDU (KÜ ilma teekontaktita, hoone KÜ-st väljas) → kauguspõhine fallback (≤300 m).

**Miks:** talu on suur maa-ala — elamu võib olla teest 300+ m kaugusel, aga KÜ piir puutub teega kokku (juurdepääs). Varem jäi selline aadress (nt Loigu, 356 m) kauguspiiri taha. KÜ põhjal omistatakse see õigele teesõlmele. Samuti ei loeta ühte aadressi mitu korda (taluõue hooned eri sõlmede juures).

**Andmeallikas:** `pipeline/ads_ky.py` (WFS `aks:ads_ky`, atribuudid `orig_tunnus`, `taisaadress`). Vajalik `{prefix}_ads_ky.gpkg`.

### 3. Elanike arv hoone kohta

```python
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` — OSM aadressiga (peamine)
- `gravity_population_ads` / `gravity_trips_ads` — ADS (võrdluseks)
- `gravity_population_res` / `gravity_trips_res` — kombineeritud
- `gravity_population_all` / `gravity_trips_all` — laiapõhjaline

### 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 selget infot:
- "Elanikke" — peamine (kalibreeritud Rahvastikuregistriga)
- "Päeva sõidud" — trips (2× elanikud)
- "ADS (aadressid)" — riiklik register, unikaalsed aadressid (võrdluseks)
- "Detour" — haavatavus

## VAL_0193 näide (miks ADS-i võrrelda)

Valga grupp VAL_0193 — kohalikud teeharud riigitee "Puurina" küljes. Sõlmede lähedal (≤200m) on `building=yes` hooned ilma aadressita:
- `pop` (kalibreeritud) = 0 — OSM-i aadressikate puudulik, aadressid pole OSM-is
- `pop_ads` (ADS, unikaalsed aadressid) = 4.4 elanikku (846244516 ja 846244647 juures, kokku ~4-5 aadressi)

**Tähelepanek:** ADS-is oli nende punktide ümber 22 hoonet, aga ainult ~5 **unikaalset aadressi** — taluõues on elamu + mitu kõrvalhoonet samal aadressil. **Aadress on liikumiste aluseks, mitte hoonete arv.**

## Valla kogurahvastik (2026-08, kalibreeritud)

| Vald | Peamine (kalibreeritud) | Ametlik (RR) | ADS (KÜ-omistatud) | res |
|------|------------------------|--------------|---------------------|-----|
| Valga | 14 813 | 14 813 | 12 438 | 23 716 |
| Otepää | 6 225 | 6 225 | 9 163 | 15 309 |
| Võru | 10 310 | 10 310 | 15 607 | 26 311 |

**Põhimõte:** ametlik valla rahvaarv jaotatakse proportsionaalselt eluruumi aadressidele (`skaala = ametlik / OSM-addr hooned`). Nii on kogusumma täpne ja jaotus proportsionaalne aadressitihedusega.

**ADS-i parandus (2026-08):** katastriüksuse (KÜ) kaudu omistamine vähendas ADS-i arve (Valga 13 031→12 438, Otepää 9 910→9 163, Võru 17 304→15 607) — üks aadress loetakse nüüd üks kord ja suunatakse KÜ-tee lõikumiskohale, mitte iga hoone lähima sõlme järgi.

## Uurimismärkused

- **Rahvastikuregister** (Statistikaamet RV0291U) annab ametliku valla rahvaarvu 1.01 seisuga. Valga 14 813, Otepää 6 225, Tõrva 5 777 (2026), Võru 10 310 (2024)
- **Leibkonnad (tulevikuplaan):** 1 majas võib elada 4 inimest = 1 leibkond; liikumine võib olla leibkonna-põhine (kogu pere sõidab linna tööle/kooli). Statistikaametil on leibkonnaandmed (REL2021 "Leibkonnad ja perekonnad") — uurida, kas saab ruutstatistikana
- **Ruutstatistika (tulevikuplaan):** Statistikaameti rahvastiku ruutvõrk (1km/100m) võimaldaks veelgi täpsemat proportsionaalset jaotust — aga privaatsusläve tõttu ei ole detailne info alati avalik
