|
|
@@ -1,73 +1,60 @@
|
|
|
-# Rahvastiku jaotamine (WorldPop)
|
|
|
+# 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.
|
|
|
|
|
|
-## Andmeallikas
|
|
|
+## Meetod (alates 2026-08: OSM-hooned)
|
|
|
|
|
|
-**WorldPop** 100 m rahvastikuruudustik:
|
|
|
-```
|
|
|
-https://data.worldpop.org/GIS/Population/Global_2000_2020/2020/EST/est_ppp_2020.tif
|
|
|
-```
|
|
|
-Iga 100 m × 100 m ruudustiku lahtris on hinnanguline rahvaarv. Cache: `liiklussagedus/data/est_ppp_2020.tif`.
|
|
|
-
|
|
|
-## Meetod
|
|
|
-
|
|
|
-### 1. Rasteri kärpimine valla piirile
|
|
|
+### 1. Hoonete laadimine
|
|
|
|
|
|
```python
|
|
|
-with rasterio.open(POP_TIF) as src:
|
|
|
- pop_clipped, pop_transform = mask(src, geom, crop=True, nodata=-99999)
|
|
|
+bld = ox.features_from_polygon(boundary, {"building": True})
|
|
|
+bld = bld[bld["addr:housenumber"].notna()] # ainult aadressiga = eluruumid
|
|
|
```
|
|
|
|
|
|
-Raster lõigatakse valla piiriga (`rasterio.mask`), et töötada ainult piirkonna andmetega.
|
|
|
-
|
|
|
-### 2. Teede sõlmede kaugus rasterist
|
|
|
-
|
|
|
-Iga sõlme kohta määratakse lähedal asuv rahvastik (100 m raadiuses) kas:
|
|
|
-- puhvri abil (`geometry_mask` vms), või
|
|
|
-- lähima lahtri väärtusena
|
|
|
-
|
|
|
-### 3. Rahvastiku liitmine väljapääsupunkti teenindusalale
|
|
|
+- **Aadressiga hooned** = tegelikud eluruumid. Hõreasustuses on palju suvilaid/abihooneid (greenhouse, shed, garage...) ilma aadressita — need välistatakse.
|
|
|
+- Skript: `pipeline/building_population.py`
|
|
|
|
|
|
-Kasutades teenindusala jaotust ([[Liiklussageduse kaudne hindamine/02_Metoodika/03 Väljapääsupunktid ja teenindusalad]]), summeeritakse iga väljapääsupunkti teenindusala rahvastik:
|
|
|
+### 2. Hoonete omistamine sõlmedele
|
|
|
|
|
|
```python
|
|
|
-catchment_df # exit_node, population_catchment, nodes_served, ...
|
|
|
+dists, idxs = node_tree.query(bld_xy, k=1) # iga hoone lähim sõlm
|
|
|
+if dist <= 300: node_population[node] += persons
|
|
|
```
|
|
|
|
|
|
-### 4. Trippide genereerimine (trip generation)
|
|
|
+Iga hoone → **lähim tee sõlm** (max 300 m). Ei loeta hoonet mitu korda.
|
|
|
+
|
|
|
+### 3. Elanike arv hoone kohta
|
|
|
|
|
|
```python
|
|
|
-TRIPS_PER_PERSON = 2.0
|
|
|
-daily_trips_to_exit = population_catchment * TRIPS_PER_PERSON
|
|
|
+PERSONS_PER_BUILDING = 2.2 # Eesti keskmine leibkond
|
|
|
+PERSONS_PER_APARTMENT = 12.0 # korterelamu
|
|
|
```
|
|
|
|
|
|
-Iga inimene teeb eeldatavalt 2 päevast liikumist (kodust välja + tagasi) → päevane trippide arv väljapääsupunkti.
|
|
|
+### 4. Rahvastiku liitmine väljapääsupunkti teenindusalale
|
|
|
+
|
|
|
+Kasutades teenindusala jaotust, summeeritakse iga väljapääsupunkti teenindusala rahvastik.
|
|
|
|
|
|
-### 5. Hõreda asustuse analüüs
|
|
|
+### 5. Trippide genereerimine (trip generation)
|
|
|
|
|
|
```python
|
|
|
-SPARSE_THRESHOLD = 10 # inimest/km²
|
|
|
+TRIPS_PER_PERSON = 2.0
|
|
|
+daily_trips_to_exit = population_catchment * TRIPS_PER_PERSON
|
|
|
```
|
|
|
|
|
|
-Piirkonnad alla tihedusläve määratletakse "hõreda asustusega" (`sparse_*` väljundid) — nendes on liiklusnõudlus minimaalne.
|
|
|
-
|
|
|
## Väljundid
|
|
|
|
|
|
-- `{prefix}_catchment.csv` — `exit_node, population_catchment, nodes_served, avg_distance_m, daily_trips_to_exit, edge_length_km, trips_per_km`
|
|
|
-- `{prefix}_pop_vulnerability.csv` — rahvastikupõhine haavatavus (ümbersõit, inim-km detour)
|
|
|
-- `{prefix}_critical_edges.csv` — kriitilised lõigud (`trapped_nodes`, `trapped_population`)
|
|
|
-- `{prefix}_sparse_*.csv` — hõreda asustusega alad
|
|
|
-- PNG-kaardid: rahvastikujaotus, kriitilised lõigud
|
|
|
+- `{prefix}_pop_node_population.csv` — sõlme-taseme rahvastik (node, population)
|
|
|
+- `{prefix}_catchment.csv` — `exit_node, population_catchment, nodes_served, ...`
|
|
|
+- `{prefix}_pop_vulnerability.csv` — rahvastikupõhine haavatavus
|
|
|
+- `{prefix}_critical_edges.csv` — kriitilised lõigud
|
|
|
|
|
|
-## Kriitiliste lõikude tuvastamine
|
|
|
+## Miks mitte WorldPop?
|
|
|
|
|
|
-Lõigud, mille eemaldamisel jäävad sõlmed (ja rahvastik) ilma ühenduseta väljapääsupunktini — "bridge" analüüs + teisejärgulised (suur ümbersõit).
|
|
|
+WorldPop-i 100 m raster omistab rahvastiku **lähimale sõlmele kuni 5 km** kaugusel. Otepääl sai põllutee sõlm 281707587 (Otepää linna serv, Kanepi tee ristmik) 40.5 elanikku, kuigi teedegrupil OTE_0141 pole maju. Hoonepõhine hinnang annab sellele 0 elanikku — täpselt nagu tegelikkuses.
|
|
|
|
|
|
-## Täpsuspiirangud
|
|
|
+## Täpsus
|
|
|
|
|
|
-- WorldPop on **modelleeritud** rahvastik, mitte loendus — võib erineda tegelikust kuni märkimisväärselt väikestes külades
|
|
|
-- `TRIPS_PER_PERSON = 2.0` on lihtsustus (ei arvesta kaubavedu, läbisõitu, turismi)
|
|
|
-- Need on metoodika peamised täpsusallikad
|
|
|
+- Aadressiga hoonete arv × 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)
|
|
|
+- Piirangud: OSM-i hõlmatus (mitte kõik majad on kaardistatud), korterelamute suurus hinnanguline
|