Warszawa - komunikacja miejska

Wooow…dobra robota! Fajnie, że się przyłączyłeś do tematu :slight_smile:

To prawda. Jak robiłem to ręcznie to starałem się dodawać public_transport=platform, no i oczywiście stop_position. Teraz można byłoby dodać hurtowo tagi network=* i operator=* ale to już na szczęście prostsze trochę :wink:

No i te, których nie ma :wink:
Teraz chętnie zobaczyłbym jakiś skrypt, który pokaże ile przystanków nam jeszcze brakuje do dodania…

“Skrypt”, który zrobiłem do dodania refów to zbiór kilku plików wykonywalnych napisanych w C++. Szczerze mówiąc - jest brzydko napisany, ale postaram się go doprowadzić do zdatnej do publikacji wersji.
Skrypt działa następująco: dla każdego bus_stop/tram_stop/stop_position bez refa wyświetla najbliższe przystanki z bazy ZTM. Ręcznie wskazuję który przystanek z bazy OSM odpowiada przystankowi z bazy ZTM (wybieram odpowiadające sobie nazwy). Potem wszystko leci do bazy przez specjalnie stworzonego klienta OSM API. Bez refów zostały przystanki nazwane źle (na przykład “Gocław” zamiast “Gocław 09”) czy przystanki bez współrzędnych w bazie ZTM.

Tutaj plik HTML (trzeba pobrać i otworzyć w przeglądarce) z kompleksowym zestawieniem i bezpośrednimi linkami do punktów:
https://drive.google.com/file/d/0B4srO7vPCZeiVXZleG9OMlZwU0U/edit?usp=sharing

Jak rozumiem to w pierwszej kolumnie jest wskazywany istniejący bus/tram_stop, w drugiej istniejący stop_position, a jak nie ma nic to w 3 kolumnie jest info? Jest to dość czytelne, ale wolę się upewnić :stuck_out_tongue: Teraz widać, gdzie czego brakuje…i można zacząć dodawać stop_position :wink:

Jeszcze możnaby podobną rzecz dla platform porobić, bo one chyba też mają dostawać ref, prawda?

Edit: A skąd błąd/błędy? Np. Borzęcin Mały 01, a w Twoim htmlu, brak otagowania…?

Nawet niezbyt piękny kod warto udostępnić, bo może się przydać - to znaczy jak chcesz to go trochę podrasuj najpierw, ale jeśli ma to być przeszkoda w publikacji, to nie warto o to kopii kruszyć (tak, reprezentuję “szkołę Linusa” :slight_smile: ). Pewnie na githuba możesz wrzucić, bo to fajna, zintegrowana i popularna platforma.

Szczególnie że często zdarza się “tego kodu nie opublikuje bo brzydki, poczekajcie aż poprawię” a potem nie ma ani ładnego ani brzydkiego. Sam już tak kilka razy zrobiłem, lepiej wrzucać co jest a potem też poprawioną wersję.

Dokładnie.

W HTML-u uwzględnione są tylko dane OSM dla Warszawy, ale postaram się naprawić i podmienię plik.

Edit: podmienione, liczba przystanków w trzeciej kolumnie spadła z 900 do 480.

Edit2: Tu link do github z generatorem tego html: https://github.com/mar5991/ztmtoosm/

No i wszystko jasne :wink:

Ja też się pobawiłem i w pythonie stworzyłem coś takiego:
https://github.com/javnik36/ZTMvsOSM
Może się przyda :wink:

Od dłuższego czasu testuję algorytm routingowy linii autobusowych i tramwajowych. Napotykam na pewne problemy, między innymi czasem routing “ścina” trasę po jakiś drogach serwisowych. Generuję plik GPX w którym sprawdzam poprawność wygenerowanych linii, następnie zapisuję w formacie zdatnym do edycji w JOSM i wysyłam na serwer. Wkrótce postaram się opublikować kod źródłowy.

  • jak oznaczać kursy wariantowe?
  • w jaki sposób do relacji typu “route” dodawać “platform”?
    Mam też prośbę: uporządkowanie przystanków przy Powstańców Śląskich i Marymonckiej pozwoliłoby na dodanie do bazy jeszcze nieistniejących tam linii, na przykład 523, 303.

Aktualnie jest tam remont, ale jak chcesz to moge zrobić tam porządki.

Może po prostu dodawać do relacji znacznik via=*? http://wiki.openstreetmap.org/wiki/Proposed_features/Public_Transport#Route_direction.2Fvariant

Z rolą platform / platform_exit_only / platform_entry_only.

Miałem też ciągoty na zrobienie takiego routingu, jednak nie miałem tak dużego samozaparcia(i umiejętności) żeby zacząć. Próbowałem się pobawić i zrobić parser tego formatu ztm do gtfs(Ty chyba też?-na githubie widziałem)…nawet mi się udało, tylko było to w bardzo podstawowej wersji (bez tam uwzględniania przystanków na żądanie i innych takich pierdół). I z tej zabawy wyszło mi, że brakuje jeszcze trochę przystanków(nawet ztm nie wie gdzie są-koordynaty typu xx.xxx). Mam jeszcze ich listę…ale nie wiem na ile aktualną: http://pastebin.com/fNJp14WP. Przez to trochę ten gtfs miał od groma błędów.
A…no i ostatnio zrobiłem porządek z 1 linią metra i dodałem relację drugiej.

Powstańców i Marymoncka zrobiona.

Może ktoś zerknąć na te relację https://www.openstreetmap.org/way/176677445, natrafiłem na nie robiąc uwagi https://www.openstreetmap.org/note/222119#map=18/52.32247/20.94578&layers=N
Wygląda na to że linie się dublują. MARC12 to prośba do Ciebie, widzę że codzienne coś robisz więc nie chce Ci nic psuć.

Nie dublują się. Odpowiedź na oba pytania to route_master

Tak na szybko - na Łazienkowskim została jeszcze trasa autobusu 523 do usunięcia (czyli generalnie do zaktualizowania przebiegu), poza tym na moście już jest “czysto”.

Ale przy okazji chciałem zapytać jak dużo roboty nam zostało do celu, czyli półautomatycznego aktualizowania tras komunikacji miejskiej w Warszawie na podstawie rozkładów ZTM? Podstawa to przystanki w sensie miejsca zatrzymywania pojazdu (miejsce oczekiwania nie jest do tego konieczne, choć oczywiście też warto mieć) - ile ich już mamy a ile jeszcze brakuje? Drugie zagadnienie to wydobywanie danych z rozkładów i skrypt do trasowania linii na ich podstawie.

O właśnie - jak ci idzie z poprawianiem i co z tą zapowiadaną w grudniu publikacją kodu?

To 523 na Łazienkowskim, które w końcu zrobiłeś, kłuje mnie w oczy - czy możesz zaktualizować jego trasę? Jeśli potrzeba jakichś przystanków do tego, to daj znać, chętnie je uzupełnię.

@kocio
Myślę, że problem to czas kolegi MARC12 :slight_smile: Ja też jestem za publikacją kodu, bo z jako taką instrukcją, każdy z nas mógłby pomóc.
Zobacz sobię na listę wygenerowaną z pomocą skryptu kolegi MARC12. Możesz pooznaczać w wolnej chwili :wink:
Główną przeszkodą w automatyzacji naszych tras będzie brak przystanków tymczasowych. A żeby je wprawadzić to trzeba się nieźle pobawić, bo w komunikatach ztmu często gęsto bardzo ogólnie jest opisana lokalizacja tych przystanków.
Kolejna sprawa to ilość tych przystanków, które pozostaną nam na mapie, a nie będą używane. Możnaby zrobić taki skrypt, który by sprawdzał czy przystanek tymczasowy jest w użyciu przez jakąkolwiek linię i jeżeli nie to po jakimśtam czasie usuwać je z OSM. Inaczej będzie ich sporo.

Na przełomie roku udało mi się lokalnie postawić opentripplanner z danymi z ztmu i osm. Jakość trasy wyglądała podobnie do Google Transit, też była prosta kreska od przystanku do przystanku(bo brak przebiegu geometrycznego w ułomnym gtfs’ie). Może nawet lekko gorzej bo w googlu jest ładny routing w metrze i tramwajach :slight_smile:

Pytanko do MARC12: Już dla wszystkich linii w aglomeracji aktualizujesz trasy? Czy są jeszcze jakieś problemy? Na jakiej podstawie twój skrypt dodaje platform do relacji? Na podstawie tagu ref=*, jak podejrzewam?

Mnie się też zawsze zdaje, że powinienem się jeszcze bardziej sprężyć :slight_smile: , ale to tylko złudzenie - na szczęście jest jeszcze społeczność i mogę się skupić na drobiazgach rzeczywiście najbardziej przyciągających moją uwagę. MARC12, jeśli chodzi tylko o czas “żeby to do ludzkiej postaci doprowadzić”, to nie daj się prosić i udostępnij to, co jest. nie czekając na ten mityczny moment!

O takie podsumowanie właśnie mi chodziło! Ej, no to jest nieźle - te kilkadziesiąt (na oko) brakujących punktów zatrzymywania to nie jest nic wielkiego, a punkty/obszary oczekiwania można spokojnie zostawić na potem.

A swoją drogą - czy to się regularnie robi gdzieś z tego skryptu, czy to jednorazowa akcja? I skąd to wytrzasnąłeś? No i skąd “przyst_06_03.html” - czyżby to obrazowało stan na dzień jutrzejszy? Wiem, mam dużo pytań jak coś mnie interesuje… :slight_smile:

Przydałoby się pewnie kilka takich skryptów diagnostycznych regularnie odpalanych (najlepiej po każdej nowej wersji rozkładów), bo przy tej ilości nikt ręcznie nie jest w stanie kontrolować wszystkich braków i problemów. W tym także monitorowanie ostatnich zmian, bo przecież nie cała sieć się zmienia codziennie i jak już z grubsza ją wyrysujemy, to potem pozostaje krytyczna analiza, czy wszystko w porządku i czy można przyklepać nową trasę do wrzucenia do naszej bazy (bo tak to sobie wyobrażam na razie - pewnie jeszcze przyjdzie czas na większą automatyzację).

Pewnie takie trasowanie to byłbyś w stanie nadrobić. :slight_smile:

I jak zabawa z nim? Obiecująco do rozwijania, czy tylko taki prosty dowód, że się da? Może też jakiś kod do udostępnienia? :slight_smile:

A w tym wygenerowanym spisie bardzo by mi się przydał znacznik (np. http://www.openstreetmap.org/?mlat=52.248670&mlon=21.044260&zoom=18), żeby łatwiej lokalizować gdzie niby ten przystanek ma być. Także kierunek, bo to pomaga szukać po właściwej stronie drogi - lub uznać, że to tylko przystanek postojowy, gdy kierunku brak.

Warto też zadbać o właściwe kodowanie pliterek, bo nie zawsze znam nazwę i nie wiadomo która to literka naprawdę.

No i wreszcie dziwne, bo część niby nieistniejących u nas przystanków już jest dodana (np. Cendrowice sam dodałeś, i to jeszcze w grudniu) - więc właściwie z kiedy ten pliczek jest? Szkoda mi czasu na samo sprawdzanie - tzn. ja tak sobie robię też, ale najpierw chciałbym wiedzieć, że trasowanie nam zadziała.

http://vps134914.ovh.net/wyszuk/openlayers.html - Tutaj aktualne zestawienie. 1. część pokazuje trasy które da się zaktualizować - weryfikuję poprawność trasy na mapie z prawej i uruchamiam inny skrypt wysyłający zmiany.
2. część to trasy błędne i jest napisane dlaczego nie da się wygenerować (Dla 523 brak BEMOWO-RATUSZ 60).
3. część to trasy poprawne. W zestawieniu w ogóle nie uwzględniam linii typu L ani SKM.

Teraz piszę wyszukiwarkę połączeń z wizualizacją tras “po ulicach” - tutaj jest to rozwijane: http://vps134914.ovh.net/wyszuk/wyszukiwarka1.html
Platformy dodaję na podstawie ref, ale tylko te w postaci node i way, te w postaci relation postaram się dodać.
Napisałem jeden ze skryptów analizujący linie autobusowe w aglomeracji poza drzewem relacji ZTM - ewidentne duble skasowałem. Można więc też zrobić skrypt usuwający niepotrzebne przystanki.
Sam kod wisi na githubie co podałem kiedyś pod gałęzią tested.

Bardziej mnie interesuje to zestawienie (bo to dane do warstwy transportu publicznego, która już istnieje). Moje uwagi tak na pierwszy rzut oka:

  1. Bardzo by się przydał jakiś klikalny spis treści z powodu bardzo dużej liczby linii

  2. Numery powinny się lepiej sortować (na razie jest np. “22, 222, 225, 227, 23” - pewnie wystarczy dwucyfrowe typu xx traktować jak trzycyfrowe typu 0xx)

  3. Występują nieprawidłowe błędy (pewnie wszystkie w trasach, które się daje wygenerować) - np. “300101 Jest w bazie ZTM, nie ma w bazie OSM”, choć taki punkt istnieje u nas (http://www.openstreetmap.org/node/334558953).

  4. Z rzeczy drobniejszych: trzeba będzie jakoś mu podpowiedzieć, żeby umiał korzystać z zawrotek na pętli (bo np. 174 na pętli Bokserska zawraca nagle o 180 stopni) - być może jeśli trasy się nie łączą ładnym łukiem, to algorytm powinien na krańcach uwzględniać najbliższą drogę serwisową (zwłaszcza jeśli ma w nazwie “pętla” :slight_smile: ), bo pętla zwykle z takich dróg się składa.

  5. “BEMOWO-RATUSZ 60” to śmieszny przykład przystanku tymczasowego, bo nie podali nawet przybliżonych koordynatów (gdzieś indziej z kolei wypadł na jakiejś zieleni, ale możliwe, że zdjęcie jest za stare i jest tam akurat jakaś droga)… Być może do takich rzeczy warto zrobić jakiś permanentny quest dla mapowiczów, żeby zobaczyli w terenie, albo nawiązać kontakt z ZTM, bo skoro tak ładnie udostępnili rozkłady, to może są rzeczywiście kontaktowi?

Jest w bazie ZTM, nie ma w bazie OSM oznacza, że nie ma tego przystanku w relacji danej linii a nie w ogóle w bazie OSM.