Serbia/Projekti/Beograd GTFS

From OpenStreetMap Wiki
Jump to navigation Jump to search

Forum: https://forum.openstreetmap.org/viewtopic.php?id=66971

Open data: https://data.gov.rs/sr/datasets/gtfs/

Apex je objavio otvorene podatke u GTFS obliku za grad Beograd. Ova stranica služi kao mesto za komunikaciju i sinhronizaciju importa.

Faze

  • Uneti sve stanice
Bilo je 900 nedostajućih stanica. Sada ih je ostalo 150. Većinom su to stanice koje ne postoje pošto ni te linije nisu unete (3A, 407L...). Odradićemo ih onda kada budemo unesili llinije.
  • Uneti gtfs_id pored ref-a
Uneto ručno kako su sređivane linije.
  • Uneti sve master linije i tagovati lepo sve master linije i linije
Trenutni napredak se može videti ispod. Za sada su urađene sve dvocifrene autobuske linije, tramvaji i trolejbusi.
  • Pravila tagovanja
Napisana. Mogu se videti na Beograd/Javni_prevoz
  • Dodati se na PTNA
Dodati smo
  • QA/Finalna provera grešaka
Možemo koristiti JOSM (PT assistant) i PT OSM Inspector.
  • Prevesti PTNA
Ovo sam počeo da radim, nadam se da ću izgurati
  • Proveriti pozicije svih stanica
Neke stanice su jako udaljene, treba ih izlistati i proveriti. Npr. smanjiti threshold u gtfs-osm-validatoru, pa videti šta iskače.
  • Uneti transport:zone
Mogli bismo uneti i transport:zone (vrednosti bi bile 1, 2 i 3).

Uputstvo uvoza novog GTFS-a

Kada izađe novi GTFS na data.gov.rs, treba proveriti šta se promenilo i uneti izmene.

Ima više načina kako može da se odradi provera u odnosu na novi GTFS.

PTNA

Jedan je korišćenje PTNA. PTNA bi trebalo posle 24h da dobije novi GTFS i da ga prikaže. Pogledajte ovde za primer GTFS rute i ovde za primer OSM rute, svašta se može izvući. Onda bi trebalo proći liniju po liniju i proveriti oblik geometrije, stanice, vrednosti tagova master rute i rute.

GTFS-SQL-validator

Drugi način je mnogo pouzdaniji, javlja tačno razlike između GTFS-a i OSM-a i pravljen je baš za Srbiju, ali zahteva da znate i možete da pokrenete Python program. To je konzolni validator koji automatizovano proverava razlike GTFS-a i OSM-a: https://gitlab.com/stalker314314/gtfs-osm-validator. Uputstvo šta radi i kako se instalira možete naći tamo.

Zatim ga pokrenuti za neku master rutu ("11987662" je ovde ID master rute iz OSM-a, a "gtfs.zip" je zip fajl sa data.gov.rs sajta):

python3 src/main.py gtfs.zip --osm-route-master 11987662

Možete ga pokrenuti i za ceo GTFS tako da vidite šta radi i da vam ostane output.txt za posle, sa:

python3 src/main.py gtfs.zip | tee output.txt

Proći kroz sve greške koje je validator izbacio. Uglavnom će to biti neki promenjeni tagovi ili se pojavljuju ili brišu stanice. Često se dese pravopisne greške/pogrešne skraćenice... u samom izvoru (u GTFS-u) koje ne želimo da unesemo u OSM, pa onda moramo da ih ignorišemo. Najbolje je da učitate master rutu u JOSM, skinete sve članove master rute ("download members") i radite odatle.

Dodatni korisni saveti:

  • gtfs-osm-validator će uvesti ceo GTFS u lokalnu SQLite bazu. Ako imate npr. Sqlite browser, moći ćete preko SQL-a da query-ujete sve podatke, što može biti zgodno
  • Ukoliko fali neka stanica, pre nego što napravite novu, proverite da li već postoji u OSM-u preko ovakvog Overpass queryja:
[out:json];
node[ref=3537]({{bbox}});
out meta;
  • Ukoliko izbacujete neku liniju sa neke stanice, proverite da li je to poslednja linija na stanici, pa je i uklonite (pošto ako nema linija, ni stanica ne treba da postoji). Možete proveriti "stops.txt" iz GTFS zip-a da se uverite da stanica ne postoji ni u GTFS-u. Ako postoji, možete query-ovati SQLite da vidite koja zapravo linija prolazi kroz tu stanicu sa:
select distinct r.*
from stops s
	inner join stop_times st on s.stop_I=st.stop_I
	inner join trips t on st.trip_I=t.trip_I
	inner join routes r on t.route_I=r.route_I
where s.stop_id=123
  • Ukoliko primetite da su se stanice promenile na liniji, proveriti i da li se ruta linije promenila. To možete uraditi iz PTNA tako što otvorite u dva jezička browsera liniju u OSM-u i liniju u GTFS-u. Query da vidite sve stanice ako imate trip_id je:
select st.seq, s.stop_id, s.name
from stop_times st
	inner join stops s on st.stop_I=s.stop_I
	inner join trips t on st.trip_I=t.trip_I
where t.trip_id ='742259'
order by st.seq

Tri dodatna alata koja mogu biti od velike pomoći:

  • PT assistant - uz njega možete da radite QA direktno iz JOSM-a, jako lep alat.
  • SQLite Browser - pošto GTFS-SQL-validator napravi lokalnu SQLite bazu (kada se prvi put pokrene), ovim programom možete gledati po bazi ceo GTFS (ali ne možete da vidite geometrije linija). Najbitnije tabele su "routes" i "trips"
  • GTFS-SQL-importer - nije mnogo bitan, ali ukoliko imate lokalnu PostGIS bazu, ovo može da pomogne da vidite geometrije linija i stanica. Moja skripta da učitam novi GTFS je:
export PGDATABASE=beograd
psql postgres -c "SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = 'beograd'"
psql postgres -c "DROP DATABASE beograd"

psql postgres -c "CREATE DATABASE beograd"
psql beograd -c "CREATE EXTENSION postgis"

make init
make load GTFS=~/gtfs-beograd-20201222.zip

Kada imate ceo GTFS u PostGIS-u, možete se nakačiti.