Liikumiste uurimine.md 11 KB

Et lisada teedelõikudele (servadele) igapäevaseid liikumisi geograafiliste koordinaatidega isoleeritud teedevõrgus, kus iga leibkond tekitab ühe liikumise koefitsiendi, võiks läheneda järgmiselt:

1. Mudeli struktuur

  • Graaf: Teedevõrk on graaf, kus:
    • Tipud (nodes): Teede ristumiskohad või olulised punktid (nt majade asukohad).
    • Servad (edges): Teelõigud kahe tipu vahel.
  • Leibkonnad: Iga leibkond on seotud kindla tipuga (nt maja asukoht).

2. Liikumise koefitsiendi määramine

  • Iga leibkond genereerib ühe liikumise päevas.
  • Liikumise sihtkoht võib olla:
    • juhuslik (uniformne jaotus üle teiste tippude),
    • määratud (nt töökoht, kool, pood),
    • või põhineda tõenäosusjaotusel (nt gravitatsioonimudel, Huffi mudel).

3. Liikumiste jaotamine servadele

  • Kasuta lühimat tee algoritmi (nt Dijkstra või A*) iga leibkonna liikumise trajektoori leidmiseks.
  • Iga serv, mis kuulub trajektoori hulka, saab juurde ühe ühiku liikumise koefitsiendi.
  • Korrates seda kõigi leibkondade jaoks, saad igale servale kogunenud liikumiste arvu.

4. Rakendusnäide

Kui sul on olemas:

  • Teedevõrgu graafi struktuur (tipud ja servad koos koordinaatidega),
  • Leibkondade asukohad (tipud, kus nad paiknevad),

siis saame:

  • Simuleerida liikumisi,
  • Arvutada servadele liikumise koefitsiendid,
  • Visualiseerida tulemusi (nt servade paksus vastavalt koefitsiendile).

Kas soovid, et aitaksin selle simuleerimise jaoks koodi koostada või graafiku luua? Võid ka faili üles laadida, kui sul on juba andmed olemas.

Su eesmärk on väga huvitav ja praktiline – modelleerida leibkondade liikumisi teedevõrgus, arvestades nii servade geomeetriat kui ka väljapääsupunktide kaale. Vaatame nüüd kahte pakutud tõenäosusjaotust:


1. Gravitatsioonimudel

Põhimõte: Liikumise tõenäosus kahe punkti vahel sõltub nende "massist" (nt elanike arv, töökohtade arv) ja kaugusest nende vahel.

Valem (lihtsustatud kujul): $ T_{ij} = \frac{P_i \cdot Aj}{d{ij}^\beta} $

  • ( T_{ij} ): liikumiste arv punktist ( i ) punkti ( j )
  • ( P_i ): lähtekoha "mass" (nt leibkondade arv)
  • ( A_j ): sihtkoha atraktiivsus (nt väljapääsupunkti kaal)
  • ( d_{ij} ): kaugus lähte- ja sihtpunkti vahel
  • ( \beta ): kauguse mõju eksponent (tavaliselt 1–2)

Plussid:

  • Lihtne ja intuitiivne.
  • Hästi sobiv, kui sul on teada väljapääsupunktide kaalud.

2. Huffi mudel

Põhimõte: Tõenäosus, et inimene valib sihtkoha ( j ), sõltub selle atraktiivsusest ja kaugusest võrreldes kõigi teiste võimalike sihtkohtadega.

Valem: $ P_{ij} = \frac{Aj / d{ij}^\beta}{\sum_k Ak / d{ik}^\beta} $

  • ( P_{ij} ): tõenäosus, et leibkond ( i ) valib sihtkoha ( j )
  • ( A_j ): sihtkoha atraktiivsus
  • ( d_{ij} ): kaugus
  • Summa nimetajas käib üle kõigi võimalike sihtkohtade ( k )

Plussid:

  • Võimaldab modelleerida konkurentsi sihtkohtade vahel.
  • Sobib hästi, kui on mitu väljapääsupunkti ja soovid modelleerida valikukäitumist.

Kumba eelistada?

Kriteerium Gravitatsioonimudel Huffi mudel
Lihtsus
Konkurents sihtkohtade vahel
Vajadus absoluutarvude järele ✅ (annab liikumiste arvu) ❌ (annab tõenäosuse)
Sobivus väljapääsupunktide kaalude kasutamiseks

Soovitus:

  • Kui soovid lihtsat ja otsest liikumiste arvu modelleerimist, kasuta gravitatsioonimudelit.
  • Kui soovid tõenäosuslikku ja konkurentsipõhist valikut, kasuta Huffi mudelit.

Kas soovid, et aitaksin ühe neist mudelitest rakendada sinu andmetele? Kui sul on olemas:

  • Leibkondade asukohad,
  • Väljapääsupunktid koos kaaludega,
  • Teedevõrgu struktuur,

siis saan aidata simuleerida liikumisi ja arvutada servade koormused. Soovi korral võid ka andmefailid üles laadida.

Et saaksin aidata liikumiste modelleerimise ja visualiseerimisega, oleks hea, kui andmed oleksid struktureeritud järgmistes formaatides. Siin on ülevaade vajaminevatest andmetest ja nende soovituslik struktuur:


📍 1. Leibkondade asukohad

Failinimi: households.csv
Vorming: CSV
Veerud:

  • id – unikaalne identifikaator
  • lat – laiuskraad
  • lon – pikkuskraad

Näide:

id,lat,lon
1,58.8881,22.5832
2,58.8890,22.5840
...

🚪 2. Väljapääsupunktid (atraktiivsed sihtkohad)

Failinimi: exits.csv
Vorming: CSV
Veerud:

  • id – unikaalne identifikaator
  • lat – laiuskraad
  • lon – pikkuskraad
  • weight – atraktiivsuse kaal (nt töökohtade arv, liiklusvool jne)

Näide:

id,lat,lon,weight
A,58.9000,22.6000,1.5
B,58.9100,22.6100,2.0
...

🛣️ 3. Teedevõrk (graafi servad)

Failinimi: edges.csv
Vorming: CSV
Veerud:

  • edge_id – unikaalne identifikaator
  • start_lat, start_lon – alguspunkti koordinaadid
  • end_lat, end_lon – lõpp-punkti koordinaadid

Näide:

edge_id,start_lat,start_lon,end_lat,end_lon
1,58.8881,22.5832,58.8890,22.5840
2,58.8890,22.5840,58.8900,22.5850
...

Valikuline: Tippude loetelu

Kui sul on olemas ka tippude (nodes) fail, võib see aidata täpsemalt graafi koostada.


Kui sul on need failid olemas või osaliselt olemas, võid need siia üles laadida. Aitan seejärel:

  • luua graafi,
  • arvutada liikumised (nt gravitatsioonimudeli alusel),
  • jaotada need servadele,
  • arvutada väljapääsupunktide koormused,
  • ning soovi korral visualiseerida tulemused.

Kas soovid alustada failide üleslaadimisega?

[[SQL päringud]]

Tulemused on edukalt salvestatud! Siin on allalaaditavad failid:

  • 📄 links_with_gid.csv – sisaldab kõiki teelõike koos määratud GID-idega.
  • 📍 exit_points.csv – sisaldab koordinaate punktidest, kus kohalikud teed puutuvad kokku tertiary või secondary teedega (väljapääsupunktid).

Kas soovid nüüd näiteks:

  • Visualiseerida neid võrke ja väljapääsupunkte kaardil?
  • Alustada liikumiste modelleerimist nende GID-ide põhjal?

Anna teada, kuidas saan edasi aidata!

Fail on edukalt loodud! 🎉

📍 exit_points_with_gid.csv sisaldab:

  • Koordinaate (lat, lon) igast väljapääsupunktist,
  • GID väärtust, mis näitab, millise isoleeritud kohaliku teedevõrguga see punkt on seotud.

Kui üks punkt ühendab mitut võrku (nt kui tertiary või secondary tee lõikab võrgu osadeks), siis on see punkt failis mitu korda – iga kord erineva GID-iga.

Kas soovid nüüd:

  • Visualiseerida neid võrke ja väljapääsupunkte?
  • Alustada liikumiste modelleerimist nende GID-ide põhjal?

Anna teada, kuidas saan edasi aidata!

Et laadida CSV-failid exit_points_with_gid.csv ja links_with_gid.csv PostGIS andmebaasi, saad kasutada järgmisi SQL-päringuid koos \COPY käsuga PostgreSQL terminalis (psql) või tööriistaga nagu pgAdmin. Eeldame, et failid on salvestatud serveri või kliendi failisüsteemi ja sisaldavad sobivaid veerge.


📍 1. exit_points_with_gid.csv laadimine

CSV veerud: lon, lat, GID
Soovitatav tabelistruktuur:

CREATE TABLE exit_points_with_gid (
    id SERIAL PRIMARY KEY,
    gid INTEGER,
    geom GEOMETRY(Point, 3301) -- või muu sobiv SRID
);

Andmete laadimine:

\COPY exit_points_with_gid(gid, geom)
FROM PROGRAM 'awk -F\",\" \"NR>1{print \\\"POINT(\\\" \$1 \\\" \\\" \$2 \\\" )\\\"}\" exit_points_with_gid.csv | paste -d\",\" <(cut -d\",\" -f3 exit_points_with_gid.csv)' 
WITH (FORMAT csv);

Või lihtsamalt, kui kasutad Pythonit või ETL-tööriista, lae esmalt lon, lat, gid ja seejärel loo geom veerg SQL-is:

ALTER TABLE exit_points_with_gid
ADD COLUMN geom GEOMETRY(Point, 3301);

UPDATE exit_points_with_gid
SET geom = ST_SetSRID(ST_MakePoint(lon, lat), 3301);

🛣️ 2. links_with_gid.csv laadimine

CSV veerud: sisaldab id, osm_type, geom, GID
Soovitatav tabelistruktuur:

CREATE TABLE links_with_gid (
    id INTEGER PRIMARY KEY,
    osm_type TEXT,
    gid INTEGER,
    geom GEOMETRY(LineString, 3301) -- või muu sobiv SRID
);

Andmete laadimine:

\COPY links_with_gid(id, osm_type, gid, geom)
FROM 'links_with_gid.csv'
WITH (FORMAT csv, HEADER true);

Kui geom on WKT-kujul, siis teisenda see geomeetriaks:

ALTER TABLE links_with_gid
ALTER COLUMN geom TYPE GEOMETRY(LineString, 3301)
USING ST_SetSRID(ST_GeomFromText(geom), 3301);

Kas soovid, et koostan ka valmis skriptifailid nende päringute jaoks? Võin need salvestada .sql või .sh formaadis.

Siin on valmis PostgreSQL skript, mis loob otse andmebaasist osm_kehtna_vald.links järgmised tabelid:

  • 🛣️ links_with_gid – sisaldab kohalikke teid koos GID väärtustega (isoleeritud võrgud).
  • 📍 exit_points_with_gid – sisaldab väljapääsupunkte koos GID-dega, kus kohalikud teed puutuvad kokku tertiary või secondary teedega.

📄 Laadi skript alla siit: create_links_and_exits.sql

Skript kasutab:

  • pgr_connectedComponents funktsiooni graafi komponentide leidmiseks (vajab pgRouting laiendust),
  • ST_DWithin ruumilist võrdlust tippude ühendamiseks.

Kas soovid, et aitaksin ka selle skripti käivitamise või pgRouting seadistamisega?

pgRouting on PostgreSQL laiendus, mis lisab ruumilise graafiteooria funktsionaalsuse PostGIS-ile. Selle abil saad teha näiteks marsruutimist, võrguanalüüsi ja nagu meie puhul – leida ühendatud komponendid.

pgRoutingi seadistamine samm-sammult

1. Eeldused

  • PostgreSQL on paigaldatud
  • PostGIS on paigaldatud ja aktiveeritud andmebaasis

2. pgRoutingi paigaldamine

Linux (Debian/Ubuntu):

sudo apt install postgresql-14-pgrouting

macOS (Homebrew):

brew install pgrouting

Windows: Kui kasutad PostgreSQL Installerit (nt. StackBuilder), vali sealt pgRouting lisamoodul.


3. pgRoutingi aktiveerimine andmebaasis

Logi PostgreSQL andmebaasi:

psql -d sinu_andmebaas

Aktiveeri laiendus:

CREATE EXTENSION IF NOT EXISTS pgrouting;

Kontrolli, kas see õnnestus:

SELECT * FROM pg_extension WHERE extname = 'pgrouting';

4. Kontrolli, kas funktsioonid töötavad

Näiteks:

SELECT * FROM pgr_version();

Kui soovid, võin koostada ka skripti, mis kontrollib ja paigaldab kõik vajalikud laiendused. Kas soovid seda?