Warszawa - komunikacja miejska

Zastanawiam się w ogóle, czy nie lepiej zrobić jakiś parser do jakiegoś w miarę standardowego formatu pośredniego (np. jakaś odmiana XML), i dopiero tamten obrabiać?

Być może nawet nie warto się męczyć i na początek zasięgnąć w tej sprawie języka u samego ZTM, skoro sami zapraszają:

(Pewnie chodzi o ten formularz: https://secure.ztm.waw.pl/?c=115&l=1)

Chodzi ci o ten nieczynny? Użyłem współrzędnych istniejącego przystanku obok, bo nie chciało mi się kombinować, a leżą tuż koło siebie.

Nie, nie, spokojnie. Akurat takie linki kliknąłem i myślałem, że druga część (z rozkładami) dotyczy tramwajów. Nie przyjrzałem się dokładnie.
A to jest podzielone na sekcje z dodatkowymi szczegółami.

I nie chodzi mi o ten nieczynny, tylko o plik ogólnie.

Nowy skrypt jest jeszcze bardziej przydatny! Dałbym tylko w nagłówku HTML-a kodowanie Windows 1250, żeby tekst był w pełni czytelny.

Ale chyba nie rozumiem o co chodzi z tymi zdublowanymi położeniami przystanków - podaj przykład, ja w każdym razie takiego nie spotkałem.

Nie chodzi mi o zdublowanie przystanków, tylko powtarzają się wpisy dotyczące jednego przystanku.
Najpierw jest lista z czterocyfrowymi numerami. Dalej te numery i nazwy powtarzają się uzupełnione o wpisy z sześciocyfrowymi numerami i współrzędnymi przystanków. Dużo dalej między rozkładami z godzinami też pojawiają się wpisy z sześciocyfrowymi numerami (jednak nazwa tutaj jest z tej linii z numerem czterocyfrowym) i współrzędnymi przystanków. Trochę zamieszałem ale nie znam się na nazewnictwie tych wpisów w pliku.
Przykład dwóch linii “wyrwanych” z pliku z 5.05:


   7911   WARSZAWA RDMIECIE WKD,        --  WARSZAWA
         791101   1      Ul./Pl.: WARSZAWA,                         Kier.: WARSZAWA OCHOTA WKD,              Y= 52.227560     X= 20.999990  
               791101  WARSZAWA ŚRÓDMIECIE WKD,       --    Y= 52.227560     X= 20.999990  

Z tym, że (dla pliku z 5.05) zamiast 25536 linii z linkiem jest ich tylko 7911. Więc albo coś gubimy albo część wpisów jest wielokrotnych.

EDIT. Np. dla przystanku 100101 w pliku jest 10 wpisów z tymi samymi współrzędnymi.
Czyli możemy wnioskować, że ostateczny skrypt wybiera to co trzeba i plik jest 4x mniejszy.

Najwyraźniej chodzi o to, że plik składa się z kilku sekcji i te przystanki mogą się gdzieś powtarzać, pewnie w opisie linii. Trzeba ograniczyć działanie skryptu do sekcji “ZP” (tzn. między znacznikiem “*ZP” a “#ZP”) i dalej nie przetwarzać - opisy linii są w dalszej sekcji “LL”.

Tak też działa ostatnia wersja. Uzupełniłem o kodowanie.

Uff, na dziś dość, na razie stanąłem na zespole 1100. Dzięki temu skryptowi oznaczanie refów idzie stosunkowo sprawnie, a zdarzające się czasem korekty położenia albo dodawanie brakujących przystanków nie absorbują więcej uwagi niż powinny!

Widzę, że Javnik też ruszył z kopyta - czy jedziesz wedle numerków zespołów, czy po obszarach?

Oczywiście dużo lepszy byłby skrypt, który porównywałby plik z bazą i tworzył raport z danymi o obecności przystanku w jakimś promieniu, odległości od wsp. oraz jego tagowaniu. To już jednak nie moja liga. Na pewno byłby lepszy na przyszłość do wyłapywania nowych/usuniętych przystanków.

I ja dziękuje, przyda się :slight_smile:

Na razie lecę po Białołęce, potem zobaczymy jak…

Trzeba robić, bo wg. moich danych w aglomeracji jest ~2250 zespołów przystankowych i ~5500 przystanków. W osm w obszarze na oko aglomeracji jest ~4300 przystanków, z tego ~4000 nazwanych…a tych z tagiem ref wprowadziliśmy dotychczas ~350 :wink:

Hm, lecisz raczej po Tarchominie jak dotąd - Białołęka jest prawie nietknięta. Link na Overpass pokazuje tylko przystanki autobusowe i to w starym stylu (nowe to te z podziałem na miejsce oczekiwania i postoju), a tramwajowych w ogóle nie uwzględnia, więc trochę więcej. Ale oczywiście w zależności od tempa pracy to i tak pracy na tygodnie lub miesiące.

Nom…to taki czas przyszły w domyśle miał być :slight_smile: Ale już cała Białołęka zrobiona. Parę rzeczy wyszło: np. taki przystanek mamy w bazie osm: Okrągła 01 i 02 po drugiej stronie. Przystanków nie ma w bazie ztmu, co pewnie oznacza, że chwilowo nie są one używane…ale nie mamy do nich numerów. Znalazłem też trochę tymczasowych z numerami 5x, ale zostawiłem je w spokoju :slight_smile:

Widzę, że Alkomat zaczął po lewej stronie Wisły grzebać, ale i tak przydałaby się pomoc…

Edit: Będę wybierał przystanki spoza Warszawy :slight_smile: Zaczynam od Legionowa…
Edit2: Trochę się pobawiłem tym skryptem i zrobiłem gpx’a z tymi przystankami…niestety nie ma tam ich nazw, ale są przynajmniej te nieszczęsne numery zgeolokalizowane :slight_smile: Może się przyda komuś

Tak więc, wygląda to mniej więcej tak:

Udało mi się shakować ten skrypt tak, żeby uwzględniał przystanki autobusowe i tramwajowe zarówno w starszym (“highway=[bus|tram]_stop”) jak i w nowym (“public_transport=stop_position”+“[bus|tram]=yes”) tagowaniu:

http://overpass-turbo.eu/s/3mj

Na razie mamy oznaczonych ponad 1300 przystanków. Postanowiłem dalej jechać po kolei po numerkach - wprawdzie jest to dublowanie cudzych edycji, ale przy okazji poprawiam pozycje przystanków, więc jest dokładniej, no i mam gwarancję, że żaden zespół nie umknie.

Po tym pierwszym przebiegu (dodawanie refów) trzeba będzie poznajdować przystanki, które nie mają oznakowanego punktu zatrzymywania i dodać te punkty na drogach, bo jeśli chcemy - mniej lub bardziej - automatycznie dostawać trasy na podstawie zadanych przystanków, to punkty postoju leżące poza drogami się do tego nie nadadzą.

Czy ktoś w ogóle planuje się zająć skryptami do automatyzacji? Na początek potrzebny byłby wykaz nowych przystanków oraz ew. przesunięte lokacje (względem poprzednich pozycji z bazy ZTM, bo nasze lokacje są i tak nieco różne), żeby nasz zestaw przystanków łatwo się aktualizowało bez przeglądania całości. Jak już będziemy mogli aktualizować wszystkie przystanki, to przydałby się skrypt rutujący trasy wedle rozkładu po tych przystankach. Ale że to już wymaga stosowania (niezłożonego, ale zawsze) rutowania, to pośrednim krokiem byłby prostszy skrypt testujący, czy już wprowadzone przebiegi tras zawierają wszystkie wymagane przystanki i czy trasa jest ciągła - wprawdzie poprawiałoby się te zmiany ręcznie, ale bez automatu w ogóle nie zapanujemy nad tym.

W 1 fazie przydałby się skrypt, który sprawdzałby czy mamy dany przystanek u siebie. Jeśli nie tworzyłby listę potrzebnych do wprowadzenia przystanków.

Niestety, ja raczej nie pomogę :frowning: Moje umiejętności programistyczne są zbyt wątłe, ale spróbuję i nie obiecuję wygrzebać coś takiego jw. Chyba potrzeba nam programistów :wink:

Dobra…teraz pytania dot. trwającej roboty :slight_smile:

  1. Co z tagiem ref dla stacji kolejowych? Znalazłem parę takich i nie wiem co z tym zrobić…dać na linii kolejowej stop_position jakiś i tam ref, czy jakoś inaczej?
  2. Poza Warszawą spotkałem się z przystankami nazwanymi nazwa przystanku (nazwa miejscowości). Jak dla mnie to nie ma potrzeby żeby była podawana dodatkowo w nazwie przystanku miejscowość. Co Wy na to?

Niestety są przypadki, gdzie taka chora nazwa jest nazwą oficjalną.

Nie wiem na ile może się tu przydać mapa. Na razie poczyniłem taki prototyp. Zanim zacznę działać dalej, chciałbym uzyskać informację czy jest sens i jak to dalej pchnąć, jakie obiekty i jak przedstawić. Żeby nie robić OT, proponuję na ten temat rozmawiać w wątku o wizualizacjach.

Moja wizja na teraz jest taka, żeby “zakrywać” obiekty innymi. Np. highway=bus_stop zasłaniane jest przez public_transport=stop_position + bus=yes (dla tramwajów tak samo). Wizja ta wynika z braku czasu na zabawę w dochodzenie co i jak. Chyba, że ktoś opracuje specyfikację z propozycjami wizualizacji.

PS. Nadal uważam, że do wyłapywania potencjalnych błędów, braków, dubli, itp. lepszy byłby skrypt.

Na szczęście w nomenklaturze ZTM-u nic takiego nie ma - miejscowość jest podawana tylko w rozkładzie, pewnie dla orientacji pasażerów szukających połączeń. Jest za to kulawa w inny sposób - po kropce w skrótach chyba nigdy nie dają spacji, np. “Dw.Wschodni (Kijowska)”, ale ja bym się nie trzymał tej ich dziwnej maniery interpunkcyjnej. W nawiasach są tylko ujednoznacznienia (tu dla odróżnienia od “Dw.Wschodni (Lubelska)”), miejscowości nie ma, stąd kilka zespołów o prostej nazwie “Cmentarz” w różnych miejscowościach. Zastanawiałem się, czy może rozwijać te skróty w ogóle (np. na “Dworzec Wschodni”) dla wygody użytkowników, ale nie doszedłem do żadnego wniosku - może czytelniej rozwijać, ale ludzie mogą szukać z natury i wtedy napiszą raczej tak jak widzą.

Reasumując: nie przejmowałbym się bardzo zgodnością nazw z nomenklaturą ZTM-u, bo do rozkładów będziemy mieli jednoznaczne przypisanie przez ref, czyli automaty i “obsługa” będą szczęśliwi, więc w nazwach można zadbać głównie o dobro użytkowników.

Ja też tak sądzę, skrypty są nam potrzebne. Natomiast potrzeby wizualizacji osobiście nie widzę, bo ilość przystanków jest hurtowa i trudno wyłapywać konkrety. Z mapki Javnika zrobiłem sobie tylko gustowną tapetkę… :wink:

Znalazłem za to fajny tag do oznaczania nieczynnych przystanków: http://wiki.openstreetmap.org/wiki/Key:disused. W praktyce byłoby to pewnie oznaczane jako:

  • disused:highway=_stop*
  • disused:public_transport=*

Dłubię pomalutku parser przetwarzający ten wielki plik na xml. Ale to jeszcze potrwa, bo format kiepski do przetwarzania, a moce przerobowe są jakie są.

Spokojnie, jak widać nawet samo tagowanie refów też jeszcze musi potrwać… A w jakim języku to robisz? Myślę, że najlepiej, gdyby wszystkie skrypty dotyczące projektu leżały docelowo na serwerach OSM Polska (nie wiem - Osmapa tam leży?) i mogły się stamtąd automatycznie odpalać, więc chciałbym wiedzieć czy na serwerze będzie odpowiedni interpreter.

Poza tym wykryłem ogólną regułę numeracji zespołów (kierunki z grubsza):

  • od 1000 są na prawym brzegu na północ
  • od 2000 - prawy brzeg na południe
  • od 3000 - lewy brzeg na południe
  • od 4000 - lewy brzeg na południowy zachód
  • od 5000 - lewy brzeg na północny zachód
  • od 6000 - lewy brzeg na północ
  • od 7000 - lewy brzeg, centrum

Czyli zgodnie z ruchem wskazówek zegara licząc od góry tarczy, a na koniec obszar środkowy.