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:
Kui sul on olemas:
siis saame:
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:
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} $
Plussid:
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} $
Plussid:
| 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:
Kas soovid, et aitaksin ühe neist mudelitest rakendada sinu andmetele? Kui sul on olemas:
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:
Failinimi: households.csv
Vorming: CSV
Veerud:
id – unikaalne identifikaatorlat – laiuskraadlon – pikkuskraadNäide:
id,lat,lon
1,58.8881,22.5832
2,58.8890,22.5840
...
Failinimi: exits.csv
Vorming: CSV
Veerud:
id – unikaalne identifikaatorlat – laiuskraadlon – pikkuskraadweight – 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
...
Failinimi: edges.csv
Vorming: CSV
Veerud:
edge_id – unikaalne identifikaatorstart_lat, start_lon – alguspunkti koordinaadidend_lat, end_lon – lõpp-punkti koordinaadidNä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
...
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:
Kas soovid alustada failide üleslaadimisega?
[[SQL päringud]]
Tulemused on edukalt salvestatud! Siin on allalaaditavad failid:
tertiary või secondary teedega (väljapääsupunktid).Kas soovid nüüd näiteks:
Anna teada, kuidas saan edasi aidata!
Fail on edukalt loodud! 🎉
📍 exit_points_with_gid.csv sisaldab:
lat, lon) igast väljapääsupunktist,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:
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.
exit_points_with_gid.csv laadimineCSV 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);
links_with_gid.csv laadimineCSV 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.
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.
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';
Näiteks:
SELECT * FROM pgr_version();
Kui soovid, võin koostada ka skripti, mis kontrollib ja paigaldab kõik vajalikud laiendused. Kas soovid seda?