Otvoreni podaci: Autobuska stajališta i linije

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

Niš
https://data.gov.rs/sr/datasets/gtfs-nish/

Kragujevac
https://data.gov.rs/sr/datasets/gtfs-kragujevats/

Prvi korak bi bio popuniti “gtfs_id”:
https://wiki.openstreetmap.org/wiki/Key:gtfs_id

Pošto podatke već imamo u “ref” tagu, ima smisla da bulk prebacimo to u “gtfs_id”. Ako se niko ne buni, uradio bih inicijalno ovu promenu u narednih par dana. Onda možemo da vidimo šta dalje.

Evo query sa kojim planiram da ovo izvedem:

Sophox query

@sloba markovic Podaci se nisu promenili već par meseci (od postavljanja u junu) - da li uopšte ima smisla oslanjati se na ovakve podatke na dalje? Pretpostavljam da je bilo nekih promena u ovom periodu i da samo nije osveženo iz APEX-a? Jel imate nekih informacija?

Ovako, izukao sam sve stanice koje ne postoje u OSM-u. Ima ih preko 900. Neke od njih samo nemaju “ref”, neke uopšte ne postoje. Možete naći CSV ovde i GeoJSON fajl ovde. GeoJSON je lako može videti tako što odete na geojson.io i učitate ga odatle. CSV može iz JOSM-a ili QGIS-a npr., cimajte ako treba pomoć.

Da li ima neko ko želi da pomogne da bar ovih 900 nedostajućih stajališta popravimo? Treba učitati GeoJSON i onda - ili napraviti stanicu ili joj dodati “ref”. Dosta je pipav posao i treba znati teren dobro da bi se ovo radilo, jer možda ima grešaka u GTFS-u od Apexa, a možda je i bilo izmena od kada je ovo izašlo u junu? Ovo nam je preduslov, jer kad imamo sve stanice, možemo dalje da:

  1. dodamo gtfs_id
  2. da vidimo šta je od stanica loše uneto, šta postoji, a ne treba da postoji, šta je previše udaljeno…
  3. popravimo/dodamo rute i master rutu

Za referencu i ako neko želi da nauči nešto, evo kako sam ovo uradio: uzeo sam program https://github.com/fitnr/gtfs-sql-importer/, uneo ovaj GTFS u bazu, uneo Srbiju u bazu (preko osm2pgsql) i sa ovim queryjem[1] izvukao sve stanice koje ne postoje u OSM-u.

[1]


WITH belgrade_osm_stops AS (
	-- filtira samo Beograd
	SELECT *
	FROM planet_osm_point
	WHERE (highway='bus_stop' or railway='tram_stop')
	  and st_transform(way, 4326) && ST_MakeEnvelope(20.1, 44.23, 20.77, 45.07, 4326)
),
joined as (
	-- spaja sa GTFS-om
	SELECT *, st_distance(ST_Transform(stops.the_geom::geometry, 3857), osm_stops.way) as distance
    FROM gtfs.stops stops
    LEFT JOIN belgrade_osm_stops osm_stops on stops.stop_id=osm_stops.ref
),
missing_stops AS (
	-- filtrira samo ove sto ne postoje
	SELECT stop_id, stop_name, the_geom AS gtfs_geo
	FROM joined
	WHERE distance IS null
),
stops_with_routes AS (
	-- spaja sa trip i routes da dohvatimo koje sve linije idu ovuda
	SELECT ms.stop_id, ms.stop_name, ms.gtfs_geo, string_agg(DISTINCT r.route_short_name, ',') AS routes
	FROM gtfs.trips t
	INNER JOIN gtfs.stop_times st ON st.trip_id = t.trip_id
	INNER JOIN missing_stops ms ON ms.stop_id = st.stop_id
	INNER JOIN gtfs.routes r ON t.route_id = r.route_id
	GROUP BY ms.stop_id, ms.stop_name, ms.gtfs_geo
)
SELECT stop_id, stop_name,  ST_X(gtfs_geo) AS long, ST_Y (gtfs_geo) AS lat, routes
FROM stops_with_routes

Spali smo sa 900 na 150. Sredio sam ove što su imali pogrešne ref-ove i one koji ih nisu imali. Ovi što su preostali su koske - fale neka stajališta i fale cele linije (407L, 3A…). Njih ću ostaviti kada budem radio konkretne linije. Možete naći CSV ovde i GeoJSON fajl ovde.

Sledeće ću probati da dodam gtfs_id na stanice i master rute tamo gde fale. Evo primer jedne urađene master rute: https://www.openstreetmap.org/relation/11925754 (a i obe rute su takođe sređene, pa pogledajte i njih). Javite da li imate problem sa tagging šemom, da li nešto fali… Takođe, neke stanice, naročito za trocifrene autobuse su baš daleko od OSM stanica, i nisam siguran ko greši (OSM ili Apex), pa ću okačiti ovde i te razlike, da vidite da prepoznate lokalne stanice,

Ako neko želi da pomogne (sad treba odraditi ovih 160tak ruta), javite se, brže će ići ako se podelimo:) Kada završimo, možda možemo da se prijavimo na PTNA.

Hi, I would be happy to support you with PTNA.

We could start right now and see/list what is already mapped in OSM.

I found this searching for “PTNA” in the Wiki and saw the first line at https://wiki.openstreetmap.org/wiki/Serbia/Projekti/Beograd_GTFS

Best regards
Toni

New keys have been proposed and ‘ref’ will not be replaced

Key ‘gtfs_id’ is ambiguous and can point for several different information in the GTFS.

A documentation can be found in the Wiki

As an example, kindly see a bus in Switzerland

Br
Toni

Rekao sam prošli put da sam uzeo da prepravljam liniju 15, ali ima toliko mesta gde može da se pogreši, a i ima toliko zanimljivih stvari u GTFS-u koje se mogu uvesti. Pored toga, Apex je okačio novu verziju GTFS-a, pa sve treba isproveravati opet. Onda sam odlučio da pauziram rad na linijama i da prvo napravim program koji bi olakšao prikazivanje razlika iz GTFS-a i OSM-a i šta je različito (ili promenjeno u međuvremenu). Tool se trenutno nalazi na https://gitlab.com/stalker314314/gtfs-osm-validator i dosta mi je koristan da primeti šta je sve različito. Evo primera iz Beograda, a evo i primera iz Zagreba (Beograd trenutno nema master route-e lepo setovane, a Zagreb trenutno ne može da uvozi gtfs:* tagove). U svakom slučaju, pogledajte opet kako je urađena linija 15 i da li imate zamerki i javite se ako hoćete da se uključite u sređivanje. Ja nastavljam dalje redom po linijama da popravljam i uvozim.

Hi, great that you found us here and thanks a lot for offering help! Let me answer you and translate most important bits from my message above. We can continue over mail too (mine is @.org). To be honest, I don’t think Belgrade is ready to be imported (I mean, one could try, but I expect there will be some big tag changes, and there might be throwaway work for two imports, but you know better), so maybe wait until I contact you again! In the meantime, I had to create program that can check GTFS->OSM differences and it might be interesting to you in general. Just released it, it does a job for me and I checked with some different GTFS.zips that it behaves OK and it does not crash:) Tool is currently at https://gitlab.com/stalker314314/gtfs-osm-validator and here is example output from Belgrade, and here is example output from Zagreb (Belgrade currently can match only one master route as you can see, and Zagreb cannot import gtfs:* tags yet, so you can see two different cases here). Please do check README.md to see what fancy:) heuristics it is using and what it is able to “check”.

And yes, don’t worry about “ref”. I don’t plan to remove it, but I do plan to add “gtfs:stop_id” in parallel to “ref” (as ref can maybe mean different things, while “gtfs:stop_id” should be stable and authoritative value from our authoritative open dataset). Does this makes sense to you?

Hi Branko,

with PTNA we can start right now. There’s not much for you to do

With this first step, we could create an overview of what is already mapped in the area.

Next step would be creating a CSV list of what actually exists in reality (derived from GTFS-info?) - PTNA can support on this as well, having GTFS data.
With this CSV list, PTNA can check reality against OSM mapping: what’s missing, what does OSM have which does not exist?

BTW: PTNA searches for route=* which allows finding also PTv1 (older) routes. It then searches for their parent relations and thus finds existing type=route_master relations as well.

I’ll contact you via PM for more details.

Best regards,
Toni

Prvo da sve pohvale odam za zalaganje i ulozeni trud.
A potom da postavim pitanje:
-Iz kog razloga se desavaju ovi prekidi u trasi? Ima ih na dosta linija, ovo su primeri od nekih.

Nemam precizan odgovor, ali mislim da ljudi prepravljaju neku putanju, seckaju way, prave nove puteve i onda ne vode računa o memberima relacija i negde nešto otfikare greškom. Sva sreća, PTNA može da ukaže na ovakve prekide!

Želim još da kažem ovde da sam počeo da popravljam GTFS u Beogradu, sve zapisujem ovde: https://wiki.openstreetmap.org/wiki/Serbia/Projekti/Beograd_GTFS. Tu možete videti kako možete da se priključite - nije teško. Ima tu ukratko progres, možete da vidite kako sve to lepo izgleda na PTNA, ima i uputstvo za moj program (gtfs-osm-validator) koji mi pomaže u ovome (ali nije obavezan da se uključite). Evo počeo sam od autobuskih linija, linije 15-35 završene za sada, može se primetiti na PTNA-u da ima mnogo manje grešaka - istražite sajt, dobar je! Takođe radim i da prevedem PTNA, pa koliko od svega stignem… :slight_smile:

Samo da javim da sam uneo manje-više sve dvocifrene autobuse, tramvaje i trolejbuse. Ima tu par grešaka, što na GTFS strani, što u OSM-u, u međuvremenu je izašao novi GTFS, pa sad treba srediti to novo (sve je na stranici projekta). Sad mi je plan da dovršim trocifrene autobuse, ekspres linije i ostalo. Zvanično smo na PTNA-u, ali plan mi je da ga prevedem celog - sjajna je platforma. Napisao sam i uputstvo o tagovanju linija u Beogradu. Napisano i uputstvo kako da se ažurira stanje u OSM-u kada izađe novi GTFS. Nažalost, prestao sam da ažuriram uputstvo kako pomoći na ovom projektu pošto nema interesovanja, a meni je teško da ga menjam svako malo. Ko želi da se uključi, mora da se javi ovde ili na pvt.

Početna stranica: https://wiki.openstreetmap.org/wiki/Beograd/Javni_prevoz
Projekat i progres: https://wiki.openstreetmap.org/wiki/Serbia/Projekti/Beograd_GTFS

Zdravo Branko,

da li su nešto promenili, sa „zip“ na „7z“ ili čak na nekom drugom mestu? Ne mogu više da proveravam da li postoje ispravke za PTNA. GTFS standard zahteva da se podaci daju u obliku „zip“. (https://data.gov.rs/sr/datasets/gtfs/)

Hi,
thanks for pointing out! (I used 7z internally, not realizing spec says it has to be zip:). It is fixed now on data.gov.rs (I guess it is good opportunity for you to test if your fetching logic works too!)

Thanks Branko,

although the URL is now

(locally saved as gtfs.zip) the result is still a 7-zip file, which cannot be uncompressed with “unzip”.

$ file *
gtfs.zip: 7-zip archive data, version 0.4

Yap, I can confirm, these are same files (same hash), just renamed… sorry about this, will let you know as soon as there is proper version!

Hi Toni,
I think it should be fixed now (different files, it is indeed zip now). Sorry once again for this glitch. Let me know if it is not working!

Thanks Branko,

working well :slight_smile: and already analyzed.

update: sve master rute, sve rute i sva stajališta celog Beograda su proverena, popravljena i ažurirana! Konačno je gotov ovaj… pa bogami, višemesečni posao! Beograd nam je sad cakum-pakum. Bio je onako… ok, rekao bih da je 70% bilo OK, ali nagledao sam se svega i svačega i ispravio svašta. Mislim da smo mirni narednih par godina sada (pre nego što entropijom odemo u pređašnje stanje:D). U ovom procesu: napisao sam program koji mi je pomogao, napisao sam uputstvo šta raditi kada izađe novi GTFS, zapisao sve stanice koje imamo trenutno, sredio sve na OSM Inspectoru (ne biste verovali kako je izgledalo, a možete da procenite ako pogledate druge veće gradove)… Šta je ostalo - još uvek prevodim PTNA, a ostalo mi je i da proverim udaljenosti stanica između OSM-a i GTFS-a, da vidimo šta ćemo sa network tagom, hteo bih da se dodamo na Transportr…

Nego, hajde da vidimo šta ćemo sa network tagom u Beogradu. Trenutno za operator tag imamo “ГСП Београд”, a network tag je najčešće “ITS1” (pretpostavljam od integrisani tarifni sistem) ili neka varijacija na tu temu (“ITS2”, “ITS1/2”…). Mislim da “ITS” treba da leti (jer deluje da ne treba stavljati ko naplaćuje prevoz u ove tagove…), ali hteo bih da čujem vaše mišljenje. Uporedbe radi, evo u par drugih gradova šta ovde stoji:

Zagreb: network="local", operator="Zagrebački električni tramvaj"
Budapest: network="local", operator="BKV"
Ljubljana: network="MPP Ljubljana - Urbana", operator="Ljubljanski Potniški Promet"
Beč: network="VOR", operator="Wiener Linien"
Milan: network="SITAM", operator="AMP"
Berlin: network="VBB" (skraćeno od "Verkehrsverbund Berlin-Brandenburg"), operator="BVG" (skraćeno od "Berliner Verkehrsbetriebe")
London: network="London Buses", operator="Metroline"

Moji trenutno predlozi, po redosledu koliko mi se sviđaju:

  1. Staviti network=“БГ Превоз”
  2. Staviti operator=“БГ Превоз”, a network=“ГСП Београд”
  3. Staviti network=“local”
  4. Staviti isto kao i operator, tj. network=“ГСП Београд”
  5. Ostaviti ITS, i to tako što izbrišemo brojeve sa network-a i svi ostanu samo network=“ИТС” (pošto ta numeracija za zone nema baš smisla…šta ako se voziš sa 601 od Sava Centra do Tošinog Bunara…)

Ostavio bih ovo ovde nedelju dana, ako neko ima mišljenja na ovu temu. Ako ne - uradiću ovo prvo (network=“БГ Превоз”)

this is on the roadmap of PTNA, but might take some time though.

  • check route-relation (with gtfs:trip_id:) and its stops against the stops of that trip in GTFS. Calculate distance between platform in OSM and GTFS, complain if > x meters and optionaly show distance in ‘Notes’ as (suggestion): Platform distcances = 2, 5, 10, 4, 3 in the same order as the relation-members with role = platform

Just my 2 ct