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:
- dodamo gtfs_id
- da vidimo šta je od stanica loše uneto, šta postoji, a ne treba da postoji, šta je previše udaljeno…
- 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