Warszawa - komunikacja miejska

I jak, udało ci się z grubsza zorientować, czy potrzeba więcej czasu? Jeśli tak to powiedz ile mniej więcej, bo chciałbym trzymać rękę na pulsie.

Na razie zauważyłem 1 nowe “dziwactwo”: trasa tworząca w pewnym miejscu pętelkę tzn. zalicza najpierw pewien przystanek na trasie, a potem wraca do niego jeszcze raz tą samą ulicą i tam kończy bieg (odcinek ulicy i przystanek powinny być w relacji 2 razy).
Zmieniły się pewne formaty informacji o trasie (inne znaczki niż były).
Reszta( jeśli chodzi o same trasy, bo z rozkładami gorzej) jest do ogarnięcia, w ciągu kilku dni powinienem zrobić uaktualniony parser tras.

Nawet nie zauważyłem, jak zleciał cały miesiąc! Udało ci się coś jeszcze? A przede wszystkim - jak po tym czasie oceniasz perspektywy?

W ramach odpoczynku siadłem sobie do stworzenia parsera, który by do pliku tekstowego zapisywał przystanki, numery Id…i inne ze strony ztmu (Nie jestem żadnym programistą, ale cośtam, czasem się bawię w pythonie).
Cały szczęśliwy po skończeniu ‘pracy’ wchodzę sobie na stronę ztmu, tak żeby sobie przejrzeć :slight_smile:

I tu patrzę, że w sekcji rozkłady jazdy >> do pobrania ztm udostępnia wszystko co nam potrzeba. (nie wiem jak długo to już tam wisi, ale pewnie od paru miesięcy)
Tak więc, na serwerze ftp ztmu są spakowane na każdy dzień pliki tekstowe zawierające rozkłady jazdy, wszystkie przystanki wraz z koordynatami GPS, trasy i…tutaj jest wszystko opisane.

Nic tylko wyciągać te dane i wprost na mapy!
Tylko potrzeb kompetentych, którzy znają się i umieją takie rzeczy pisać…i oczywiście mają czas :slight_smile:
Niby wszystko ładnie, tylko to nie takie proste taki parser zrobić :confused: …niestety

Bardzo się czuję zadowolony! Nie dość, że są dane, to - z tego co zrozumiałem - jest udzielona licencja na powszechne stosowanie, opis formatu i nawet określone dobre praktyki.

W tej sytuacji jest to robota mniej lub bardziej automatyczna. Jeśli coś trzeba ręcznie, to postaram się tym zająć, choć podejrzewam, że priorytetem na razie będzie naniesienie wszystkich przystanków, bo trasy między nimi można potem prowadzić jakimkolwiek routingiem (jak już pisałem - zasadniczo nie jest ważne którym dokładnie pasem jedzie autobus od punktu do punktu, tylko chodzi o wygenerowanie “wyobrażenia” ciągłej trasy pomiędzy przystankami).

Pomysł udostępnienia danych świetny, tylko ten format… mogli się postarać o jakiś xml, no ale dobre i to.
Trzeba by napisać parser do tego, ja ostatnio pisałem parser do plików tras, ale do tego trzeba będzie od nowa.

Zabrałem się metodycznie za oznakowywanie przystanków - jadę zespołami po kolei według numeracji i uzupełniam unikalne identyfikatory ZTM po prostu jako “ref” (z opisu tagu zrozumiałem, że to idealnie pasuje). Generalnie idzie prosto, choć gdy nie wszystkie przystanki były zaznaczone, to przy dużych zespołach miałem kłopoty, bo przy zagęszczeniu przystanków i częściowo zaznaczonych przystankach dane z GPS-u nie wystarczają mi, żeby wszystko wyprostować. Jeśli ktoś może sprawdzić i ew. poprawić zespoły “Pl. Hallera” i “Dworzec Wschodni (Kijowska)”, to byłbym wdzięczny.

Nazw nie poprawiam ze wzorca ZTM, bo te ichnie nazwy - pewnie ze względów technicznych - nie mają spacji po kropce i stosują różne dziwne skróty czasem, a jak będziemy mieć dodane unikalne identyfikatory, to i tak będzie dokładnie można skojarzyć.

Jest jednak problem ujednolicania: niektóre przystanki są zaznaczane na drodze (dodaję tam tag “public_transport=stop_position”), inne jako punkty obok drogi, a bywają nawet podwójne, tzn. i na drodze i obok niej. Pytanie wobec tego, do których należy dodawać ref i jak docelowo mają wyglądać przystanki?

Pozwoliłem sobie przygotować schemat mapowania dla komunikacji miejskiej. Tak by każdy wiedział jak poprawnie mapować. Oczywiście jest to tylko propozycja, którą trzeba przeanalizować i ewentualnie poprawić.
Sądzę że taki lub podobny schemat trzeba przygotować i dodawać adres do niego jako tag do wszystkich elementów komunikacji miejskiej.

Punkt na drodze: (http://wiki.openstreetmap.org/wiki/Pl:Key:public_transport)
public_transport:stop_position
bus:yes lub/i tram=yes
name:Przystanek 01
ref:******(6 cyfrowy numer ZTM)(ftp://rozklady.ztm.waw.pl/)
network:ZTM Warszawa
opcjonalnie:
operator:Zarząd Transportu Miejskiego w Warszawie

Przystanek(chodnik przy drodze) jako punkt: (http://wiki.openstreetmap.org/wiki/Pl:Key:public_transport)
public_transport:platform
name:Przystanek 01
ref:******(6 cyfrowy numer ZTM)(ftp://rozklady.ztm.waw.pl/)
network:ZTM Warszawa
opcjonalnie:
Lepiej jako droga, najlepiej jako obszar.
area:yes
operator:Zarząd Transportu Miejskiego w Warszawie
shelter:yes/no
bench:yes/no
covered:yes/no
lit:yes/no
tactile_paving:yes/no
layer:x

Opcjonalnie mapujemy wszystko co znajduje się w obszarze przystanku:
highway:street_lamp,
highway:footway,
amenity:shelter(shelter_type:public_transport, building:yes, bench:yes/no),
amenity:bench,
amenity:waste_basket,
barrier:fence/bollard,
amenity:vending_machine (vending:public_transport_tickets),
amenity:grit_bin

Relacja zespołów przystanków: (http://wiki.openstreetmap.org/wiki/Pl:Tag:public_transport%3Dstop_area)
type:public_transport
public_transport:stop_area
name:Przystanek
ref:****(4 cyfrowy numer ZTM)(ftp://rozklady.ztm.waw.pl/)
network:ZTM Warszawa
opcjonalnie:
operator:Zarząd Transportu Miejskiego w Warszawie

członkowie:(W kolejności jak poniżej dla każdego przystanku: Przystanek 01 , członkowie 01, Przystanek 02, członkowie 02, …)
stop_position (punkt na drodze) jako stop
platform (Przystanek) jako platform
station (Jeśli takowy istnieje) jako (pole puste)
opcjonalnie:
amenity jako (pole puste)

Uporządkowanie relacji tras autobusów w super relacji:
[Linie Autobusowe]
<>[Linie zwykłe (100-299)]
<><>[Bus 100] jako route_master
<><><>[Bus 100: Przystanek Początkowy => Przystanek Końcowy] jako route (Bus [numer linii]: [pierwszy przystanek w rozkładzie] => [ostatni przystanek w rozkładzie])
<><><>[Bus 100: Przystanek Końcowy => Przystanek Początkowy] jako route

Dla [Bus 100: Przystanek Początkowy => Przystanek Końcowy] relacja jako route
name:Bus 100: Przystanek Początkowy => Przystanek Końcowy
route:bus/tram
type:route
network:ZTM Warszawa
ref:100
from:Przystanek Początkowy
to:Przystanek Końcowy

Członkowie:
Przystanek Początkowy (public_transport:platform) jako stop_entry_only
Kolejne Przystanki (public_transport:platform) jako stop
Przystanek Końcowy (public_transport:platform) jako stop_exit_only
Przystanek Początkowy (public_transport:stop_position) jako stop
kolejne odcinki drogi uporządkowane kolejno jako (pole puste)
Kolejne Przystanki (public_transport:stop_position) jako stop
kolejne odcinki drogi uporządkowane kolejno jako (pole puste)
Przystanek Końcowy (public_transport:stop_position) jako stop

Dla [Bus 100] jako route_master
name:Bus 100
type:route_master
route_master:bus
network:ZTM Warszawa
ref:100

Członkowie:
[Bus 100: Przystanek Początkowy => Przystanek Końcowy] jako (pole puste)
[Bus 100: Przystanek Końcowy => Przystanek Początkowy] jako (pole puste)

Dzięki za solidną propozycję! Rozumiem z tego, żeby ref dodawać do obu typów (i na drodze, i jako “peron”). Mam tylko wątpliwości co do proponowanej relacji przystanków - relacja zespołu przystanków ma zawierać od razu wszystkie poszczególne elementy, czy może osobna relacja będzie wiązać platformę z punktem na drodze i ew. obiektami typu budka? Bo - tak patrząc obiektami - najpierw bym powiązał w jeden obiekt (relację) cały jeden przystanek, a dopiero taki kompleksowy obiekt umieszczał w relacji zespołu przystanków. Nie wiem, czy to jasne i czy byłoby użyteczne?

A może jakiś konkretny zespół warto opracować wzorcowo, tzn. ze wszystkimi znacznikami? Ja na razie planuję dodawać refy do końca, a to jeszcze chyba kupa roboty, ale może komuś innemu by się chciało.

Nom, nom…ładnie :slight_smile:
A co robimy z tagiem towards=, który jest zapisany na w-skiej osm wiki? Stosujemy go dalej czy darujemy sobie? Bo z route_ref= to szkoda czasu…

Może czas zrobić update wiki? Chociażby dla nas, żeby tego wątku nie kartkować?

Za! To wytypujmy jakiś i go ładnie wspólnie odpicujemy :slight_smile:

Możesz zostawić Białołękę…zajmę się nią w wolnym czasie :slight_smile: Potem zacznę grzebać gdzieś indziej…

Ovarpass poglądowy (tam gdzie przystanki mają ref)

Wydaje mi się, że to rozwiązanie jest dobre (z paroma zastrzeżeniami - poniżej). Ja, wzorując się na przytoczonych źródłach, przygotowałem kiedyś zespół przystanków Al. Zieleniecka, więc mógłby on nam posłużyć jako przykład wzorcowy (po uwzględnieniu numerów ZTM). Tworzenie wielu relacji (oddzielnie dla przystanku i zespołu przystanków) wydaje mi się bezcelowe, bo nie wniesie zbyt dużo do bazy, a doda więcej pracy do przygotowania przystanków.

moje uwagi są takie:

  1. do punktów na drodze lub do platform dobrze dodawać standardowo tag highway=bus lub railway=tram_stop, jako że dużo rendererów (w tym Mapnik) nie uwzględnia póki co tagów public_transport (analogicznie dodawać wpisy highway=platform i railway=platform obok public_transport=platform).
  1. pobliskie obiekty można mapować, ale te elementy, zwłaszcza np. highway=footway trudno mi sobie wyobrazić, aby stały się częścią relacji przystanku. No i szczególnie razi mnie building=yes dodawane do wiat; building jest tagiem typowym dla budynków, a wiata jest budowlą, co dla mnie jako geodety jest różnicą fundamentalną :wink:
  1. nie wiem czy w relacji trasy jest sens wykazywać platformy (zwłaszcza, że chyba nie istnieją narzędzia do sprawdzania poprawności tras, które dopuszczają obiekty niepołączone z główną trasą), ale jeśli je oznakowywać, to z rolą nie stop, ale platform.

W języku ZTM-u nie występuje słowo “Białołęka”. :slight_smile: Zespoły są numerowane wedle nieznanej mi zasady, więc po prostu zarezerwuj sobie jakiś zakres zespołów pokrywający mniej więcej interesujący cię obszar i daj o tym znać, to je pominę.

Na oko znalazłem jeden przystanek, który w ref miał podany numer linii. Z kolei w kilku przystankach, które obrabiałem niedawno, był jakiś podobny tag (ref_cośtam), gdzie też były podane linie - sądzę, że trzeba będzie je hurtem pousuwać, bo te informacje są robione za pomocą relacji, więc nie będą użyteczne, a z czasem staną się w dodatku nieaktualne.

A propos wiat: ja bym chciał je widzieć zarówno w 2D jak i 3D, więc bez tego znacznika raczej się nie obejdzie. :slight_smile: Zastanawiałem się tylko jak je opisywać - na początku robiłem jako building=yes, ale zastanawiam się, czy nie powinien to być raczej building=roof - trudno mi policzyć ilość “ścian” przystanku, ale mniej więcej z dwóch stron są otwarte: http://wiki.openstreetmap.org/wiki/Pl:Tag:building%3Droof.

Jeszcze coś: czy ktoś sprytny mógłby sklecić skrypt np. seda, żeby wiersz rozkładu ZTM zawierający współrzędne (np. Y= 52.263450 X= 21.057140) pojawiał się w HTML-u z odnośnikiem typu http://www.openstreetmap.org/?mlat=52.263450&mlon=21.057140? Bardzo by mi to ułatwiło lokalizowanie jeszcze nie oznaczonych u nas przystanków na mapie.

O ile może być w Perl, to tak na szybko:

cat RA140428.TXT | grep 'Y= ' | perl -p -e 's/.*Y= ([0-9.]+)\s+X= ([0-9.]+)/http:\/\/www.openstreetmap.org\/\?mlat=$1&mlon=$2&zoom=18/gi;'

EDIT. W plikach zauważyłem też wsp. podane jako Y=yyy.yyyyyyyy X=xxx.xxxxxxxx

EDIT2. Nie doczytałem, że chodzi o html

cat RA140428.TXT | grep 'Y= ' | perl -p -e 's/.*Y= ([0-9.]+)\s+X= ([0-9.]+)/<a href=\"http:\/\/www.openstreetmap.org\/\?mlat=$1&mlon=$2&zoom=18\">http:\/\/www.openstreetmap.org\/\?mlat=$1&mlon=$2<\/a>/gi;'

Mniej więcej tak (język nie ma znaczenia), z tym że ten skrypt tworzy tylko gołą tekstową listę odnośników (bez opisu), a mnie chodzi o przerobienie pliku tekstowego na taki sam plik, tylko HTML-owy z możliwością kliknięcia dla szybkiego sprawdzenia gdzie dany przystanek fizycznie leży.

Już uzupełniłem poprzedni post - niestety ‘dla szybkiego’ może być problemem - plik jest wielki :wink: Może to co pokazuje się na stronie może mieć mniejszą formę.
Mam rozumieć, że na stronie ma się pojawić nazwa itp., czyli wszystko z pliku tekstowego, co jest przed wsp.

@marimil: rzeczywiście, wielki… :slight_smile:

Wobec tego może wystarczy, żeby z tego wychodził plik z listą podlinkowanych numerów, w sensie:

<ul><link>xxxxxx</link></ul>

Ja to sobie mogę ręcznie podzielić na mniejsze porcje, bylem wiedział do czego dany link prowadzi.

Wersja tylko z numerami:

cat RA140428.TXT | grep 'Y= ' | perl -p -e 's/^\s*([0-9]+)\s+.*\s+Y= ([0-9.]+)\s+X= ([0-9.]+)\s*/<ul><a href=\"http:\/\/www.openstreetmap.org\/\?mlat=$2&mlon=$3&zoom=18\">$1<\/a><\/ul>\r\n/gi;'

Wersja dla całych opisów:

 cat RA140428.TXT | grep 'Y= ' | perl -p -e 's/\s*(.*)\s+Y= ([0-9.]+)\s+X= ([0-9.]+)\s*/<ul><a href=\"http:\/\/www.openstreetmap.org\/\?mlat=$2&mlon=$3&zoom=18\">$1<\/a><\/ul>\r\n/gi;'

Wyniki wydają się lżejsze dla przeglądarki i mam nadzieję, że działa dla innych plików :wink:

Ta dłuższa wersja jest fajna, tzn. dobrze gdyby zawierała też samą nazwę przystanku, ale to wymaga chyba większego parsowania, czyli sięgnięcia do jednego z wcześniejszych wierszy (tego, w którym podany jest numer i nazwa zespołu), więc na razie wystarczy - wielkie dzięki!

Niezła jazda z tymi plikami :wink: Dla autobusów chyba jeszcze jest znośnie ale tramwaje.

Jakiś skrypt wydłubałem. Testowałem tylko na jednym pliku i mam nadzieję, że działa na innych. Dla autobusów pokazuje to co chciałeś, z tramwajami nie walczyłem (o ile w ogóle tam coś na ten temat jest). Między linkami dla tramwajów pokazują się jakieś numery-śmieci.

EDIT. A nie, pomyliłem - tam się linki do przystanków powtarzają i nie ma rozdziału ze względu na środek lokomocji.