# Teedevõrgustiku moodustamine

## Eesmärk

Moodustada kohalikest teedest funktsionaalne võrgustik, mille piirideks on riigimaanteed.

## Sammud

### 1. Piirkonna piiri laadimine

```python
boundary = ox.geocode_to_gdf(PLACE)   # "Valga vald, Estonia"
```

OSMnx geokodeerib valla nime ja laeb halduspiiri (EPSG:4326).

### 2. Teedevõrgustiku laadimine

```python
G = ox.graph_from_polygon(boundary.geometry.iloc[0], custom_filter=CUSTOM_FILTER, simplify=False)
G_proj = ox.project_graph(G, to_crs=CRS)   # EPSG:3301
```

**Filtri loogika:** võetakse kõik `highway` teed, välja arvatud jalgratta-/jalgteed jne (`CUSTOM_FILTER`). Oluline: **lisatakse ka `service` ja `track`**, mis on maapiirkondades olulised kohalikud teed (OSMnx vaikimisi `drive` filter jätaks need välja).

**`simplify=False` (2026-08):** OSMnx vaikimisi `simplify=True` liidab degree-2 vahesõlmed (sõlmed, kus tee lihtsalt jätkub ilma harudeta) üheks servaks. See kaotab lõikude jaotuse: nt tee 13645879022–13645879019 (100m, OSM-is 4 sõlme: 22→21→20→19) kuvatakse 1 lõiguna. `simplify=False` hoiab iga OSM-node eraldi sõlmena → lõigud jagunevad õigesti (18m+33m+49m). **Vajalik** `is_deadend`/`is_exit` märgete täpsuseks. Mõju: lõikude arv kasvab ~6-7× (Valga 6779→42090).

### 3. Teede klassifitseerimine

Iga serva `highway` tag alusel:

| Klass | Tagid | Roll |
|-------|-------|------|
| Riigiteed (`major_edges`) | trunk, primary, secondary, tertiary (+_link) | Piirid/väljapääsud, kiire ühendus |
| Kohalikud teed (`local_edges`) | residential, unclassified, service, track, living_street | Teenindusvõrgustik |
| Muud | ülejäänud | Filtreeritud välja |

### 4. Väljapääsupunktid

```python
exit_nodes = local_nodes.intersection(major_nodes)
```

Sõlmed, mis kuuluvad **mõlemasse** klassi — kohaliku tee ja riigitee liitumispunktid. Need on kohaliku võrgustiku "uksed" riigimaanteele.

### 5. Suurim ühendatud komponent

```python
local_ug = local_G.to_undirected()
components = list(nx.connected_components(local_ug))
largest_cc = max(components, key=len)
```

Kohalikest teedest moodustub palju eraldiseisvaid komponente (teed, mis ei ühendu teistega). Analüüs keskendub **suurimale komponendile**, kuhu jäävad enamik väljapääsupunkte.

### 6. Kaalutud graaf

`local_main` — suurima komponendi alusgraaf serva kaaluga `length` (meetrites), geomeetriaga (LineString).

## Väljundid

- `local_edges`, `major_edges` — klassifitseeritud servad
- `exit_nodes` / `main_exits` — väljapääsupunktid (kogu / põhikomponendis)
- `local_main` — kaalutud kohaliku võrgustiku graaf
- `service_df` — teenindusalade statistika (vt [[Liiklussageduse kaudne hindamine/02_Metoodika/03 Väljapääsupunktid ja teenindusalad]])

## Märkused

- Võrgustiku suurus varieerub valliti (Valga: ~21k sõlme / 42k lõiku, Otepää: ~26k/53k, Võru: ~56k/110k — simplify=False-ga)
- **Gravity optimeerimine (2026-08):** `exit_distances` arvutatakse ainult põhikomponendi väljapääsude (~21-71) vahel, mitte kõigi ~2000 exit-i vahel — sest gravity jaotus kehtib ainult põhikomponendis. Kiirendus 40+ min → ~1 min.
- Eraldi komponentide arv on suur — need on teed, mis ei ole ühendatud peamise võrgustikuga
