Aktualizacja: 8.12.2004 -> Co nowego? -> Aktualizacja bazy warszawskiej Zobacz też: Radu-Gadu Power Zobacz też: Treo-za-600 Zobacz też: TouchTetris Zobacz też: MMC-palm Zobacz też: ClockSelectorHack

Przewodas - Rozkład jazdy komunikacji miejskiej dla Palma

Jak zmieścić wszystkie warszawskie autobusy w Palmie...
[ Wstęp | Download | Historia zmian | Instrukcja użytkownika | Kompresja danych | Dane dla innych miast ]

I nadszedł Wodnik. A przybywszy wziął Ryby za pysk i zaprowadził porządek w stawie.
    Proroctwo Przewodasa

(Mam nadzieję że wszyscy wiedzą kim jest mój idol? :-) )


Dlaczego powstał Przewodas

Jeżdżąc po Warszawie komunikacją miejską z Palmem w kieszeni pomyślałem, że miło byłoby mieć programik, który potrafiłby odpowiadać na jakże istotne, ciągle pojawiające się pytania: (i to nawet w przypadkach gdy tubylcy zdarli rozkłady jazdy z przystanku)

Możliwość odszukania połączenia między nieznanymi przystankami też byłaby całkiem miła, choć nie najważniejsza bo rzadko się przydaje w praktyce o ile nie jesteś zagubionym turystą.

Istnieje już co najmniej kilka programów służących do przechowywania rozkładów jazdy, wyspecjalizowanych do różnych zadań.
Metro jest chyba najbardziej profesjonalny, ma dużo bajerów, wyszukuje połączenia i ma bazy dla wielu miast na świecie. Niestety, jak dla mnie jest zupełnie nieprzydatny, nawet gdyby powstała baza dla autobusów i tramwajów warszawskich, bo nie przechowuje informacji o godzinach odjazdów tylko o trasach. Tak jak nazwa wskazuje, jest najbardziej przydatny do znalezienia drogi w sieci metra, czyli w czymś, czego na razie w Warszawie nie ma ;-)
Następny program jaki widziałem to TimeTable, już swoją nazwą obiecujący informacje o czasie. Faktycznie, jest całkiem niezły! Program przechowuje informacje w bazie memopada, co ma tę zaletę, że można je łatwo wprowadzać samemu, zwłaszcza jeżeli jest tego mało (autor sugeruje użycie programu do odjazdów pociągów podmiejskich i pewnie ma rację). Ale umieszczenie w tym programie danych o wszystkich przystankach w warszawie byłoby mordercze o ile w ogóle możliwe, w dodatku w jego formacie tekstowym zajęłoby to pare łądnych megabajtów.
Istnieje też (i to nawet z obsługą kilku polskich miast) rozwiązanie oparte na przeglądarce iSilo, które pozwala na przechowywanie rozkładu jazdy wybranych linii konwertowanych automatycznie ze stron www. Atutem (w porównaniu do Przewodasa) jest dokładne przeniesienie danych z uwzględnieniem różnych uwag znajdujących się w opisach przystanków (kosztem bardzo duzych plików - jest to "typowa" kompresja plików tekstowych, bez analizy danych). Jednak jeżeli potrzebujemy tylko kilku linii takie rozwiązanie może okazać się najlepsze.
Idealnym dla mnie rozwiązaniem byłoby więc coś w rodzaju Metra ale z informacjami o odjazdach, rozpocząłem więc prace nad nowym programem. Dodatkowo, chciałem sprawdzić czy w moim wypełnionym po brzegi Palmie III (2MB) zmieściłby się cały warszawski rozkład jazdy? Oczywiście można umieszczać wybrane linie i przystanki, ale mieć cały rozkład to jednak dobra rzecz, no i jest wtedy możliwe wyszukiwanie połączeń.
Potem znalazłem jeszcze jeden program (produkcji niemieckiej), którego nazwy w tej chwili nie pamiętam. Potrafi on nawet wyświetlić mapę połączeń i przebieg linii - niezły bajer! Ale prace nad Przewodasem były już na tyle zaawansowane, że postanowiłem je dokończyć zwłaszcza, że sposób zapisu danych u konkurencji wykluczał zmieszczenie całej warszawy (ale mapa jest super, może też taką dorobię... ;-).

I oto jest!

Obecnie dostępna wersja realizuje już prawie wszystkie początkowo zakładane funkcje, łącznie z długo oczekiwaną obsługą osobnych rozkładów dla weekendów a ostatnio również przesiadki. Następna nowa funkcja to prawdopodobnie obsługa metra (co prawda w Polsce jest tylko jedna linia... ale trzeba myśleć globalnie, czyż nie?). W bazie nie ma jednak miejsca na komentarze przy rozkładach jazdy, w rodzaju "zjazd do zajezdni", "pojazd niskopodłogowy" czy innych informacji określających szczególne przypadki (na razie nie jest to planowane). Również konwersja danych prawdopodobnie nie jest doskonała - i tu liczę na raporty od użytkowników programu, które pomogą usunąć błędy. Błędem, o którym wiem i który pozostał z wcześniejszej wersji jest wielokrotne pojawianie się niektórych linii (tych, dla których w bazie ZTM jest kilka alternatywnych tras).

Download

Chętni do wypróbowania mogą ściągnąć program tutaj: (wersja 0.8d działa pod systemem 2.0, poprzednie wymagają conajmniej 3.0). Oprócz programu potrzebujesz również bazy dla konkretnego miasta.
Najnowsze wersje plików
Program

 przewodas-0.8d.zip- 25K, wersja 0.8d

 przewodas-0.8c.zip- 25K, wersja 0.8c
zrezygnowałem ze słowa "beta", chyba wystarczy że numerek jest mniejszy niż 1.0 :)

ClockSelectorHack - Ułatwia wybieranie godziny w Przewodasie i nie tylko

 przewodas-beta-0.8a.zip- 22K, wersja 0.8a





Jeżeli używasz PocketPC możesz spróbować programu RAiT
Warszawa Skierniewice Wrocław Szczecin Kraków Gdańsk Śląsk Lublin Poznań Bazy danych z rozkładami

Warszawa (Aktualizacja 8.12.2004)
Wersja "szybka":
przewodas-warszawa-s.pdb (190K) .ZIP (98K)
Wersja "mała": przewodas-warszawa.pdb (146K) .ZIP (74K)

PKP skonwertowane przez Azzie'go
Do ściągnięcia chwilowo stąd: przewodas-pkp.zip (228K) a wkrótce pewnie na stronie twórcy. Uwagi:
  • Nie zapomnij ściągnąć nowej wersji programu, wersja znana od lat czyli 0.8a nie poradzi sobie z tą bazą a co gorsza może ci zresetować palma
  • Nie uwzględnia tego, że pociąg może przyjechać na długo przed odjazdem (z powodu specyfiki Przewodasa ukierunkowanej na komunikację miejską, gdzie postoje są bardzo krótkie). Z tego powodu może nie odnaleźć wielu przydanych połączeń z przesiadkami.
  • Nie zawiera dodatkowych informacji o połączeniach, takich jak szczegóły kursowania (jeżeli nie jest "regularne") może za to zawierać błędy :-) O szczegółach konwersji na pewno będzie można przeczytać u Azziego.

Gdańsk - Strona z plikami prowadzona przez Marcina Babnisa.

Kraków - Strona z plikami. (Nie było by jej, gdyby nie Cleriic)

Lublin - Strona z plikami. (Konwersja bazy: Piotr Kontek)

Poznań - Strona z plikami. (Bohdan 'Nexus' Horst, nexus@hoth.amu.edu.pl)

Skierniewice - Strona z plikami. (Konwersja bazy: Azzie)

Szczecin
   
Strona z plikami. (Zawdzięczamy je mrman'owi)
   Inna wersja bazy (Stworzona przez Jacka Ostrowskiego)

Śląsk (Wszystkie miasta w zasięgu KZK) - Strona z plikami stworzona przez Michała Cieślickiego.

WKD - Warszawska Kolej Dojazdowa - Strona z plikami. (Konwersja bazy: Azzie)

Wrocław - Strona z plikami. (Bazy pielęgnuje Papa)

Wersje archiwalne
warszawa-1.09.2003.zip - 75K, aktualizacja bazy
warszawa-1.09.2003-s.zip - 97K, aktualizacja bazy

Pozostałe "starocie" zlikwidowałem, zostawiam tylko pierwszą wersję programu dla porównania...

przewodas-beta.zip - 65K, zawiera program v.0.1 i baze z warszawskim rozkładem jazdy (13.05.2002)

Historia Przewodasa

Instrukcja użytkownika

(jako NOWOŚĆ oznaczono funkcje dodane w wersji 0.8)

Po uruchomieniu program podaje informację o używanej bazie połączeń. Aby wybrać inną bazę użyj opcji "Baza danych" w menu.

NOWOŚĆ Migająca ikona (i) w prawym górnym rogu ekranu informuje, że dostępna jest porada związana z wykonaną ostatnio czynnością. Aby ją wyświetlić wystarczy kliknąć na (i).
Najbardziej typowy przykład użycia to sprawdzenie odjazdów z jakiegoś przystanku - wpisujemy nazwę przystanku do pierwszego pola.
Tak naprawdę wystarczy wpisać kilka pierwszych znaków albo od razu skorzystać z listy otwieranej przyciskiem Przystanki. Po wybraniu przystanku, w widoku głównym pojawia się lista linii z najbliższymi godzinami odjazdów (użyj scrollera jeżeli jest ich za dużo).
Jeżeli niektórych przystanków używasz często, możesz dodać je do listy ulubionych. W tym celu wybierz na liście przystanek i wskaż funkcję "Dodaj pozycję" w menu "Ulubione". Jeżeli pole "Ulubione" jest aktywne, lista przystanków będzie ograniczona tylko do pozycji, które zdefiniujesz, również w czasie automatycznego podpowiadania nazwa gdy wpisujesz je w polu tekstowym.
Podobnie można definiować ulubione linie, chociaż pewnie jest to mniej przydatne.
NOWOŚĆ Można również zapisać w "ulubionych" sytuacje, czyli równocześnie przystanek i cel. Służy do tego menu "Ulubione/Dodaj sytuacje".
Zapisane sytuacje są dostępne na liście wywoływanej przyciskiem i tej samej nazwie.
Zwykle to wystarczy, ale możemy drążyć dalej. Przycisk Linie da możliwośc wybrania konkretnej linii i obejrzenia pełnej tabelki z odjazdami.
Zawsze gdy jest wybrana jakaś linia można sprawdzic jej trasę wywołując listę przyciskiem Trasa. Wybierając inne pozycje na liście przenosimy się do innych przystanków, tak samo jak wybierając je na pełnej liście Przystanki.
Na każdej z list można również odwołać zaznaczenie, klikając ponownie na zaznaczonej pozycji. Wracamy wtedy do sytuacji kiedy wybrany jest tylko przystanek (czyli tak jak poprzednio) lub do sytuacji gdy wybrana jest tylko linia. W tym drugim przypadku, w widoku głównym uzyskamy czasy dla kolejnych przystanków na trasie (można więc określić o której znajdziemy się na danym przystanku).
Pozostał jeszcze przycisk i lista Cel. Po wybraniu jakiegoś przystanku jako cel, wyświetlane będą tylko linie, którymi można tam dojechać (szczególnie przydatne dla przystanków gdzie wyświetlają nam sie dziesiątki linii). Dodatkowo po strzałce podany jest czas przejazdu do celu.
Aby przywrócic poprzednie zachowanie (wyświetlanie wszystkich linii) należy usunąć zaznaczenie z listy Cel.
NOWOŚĆ A to już przykład z wersji obsługującej wyszukiwanie przesiadek. Po wybraniu celu, do którego nie ma bezpośredniego połączenia widzimy znajomy tekst i symbol "brak połączenia".
Przełączniki nad obszarem wyświetlania pozwalają jednak wybrać jeden z dwóch algorytmów wyszukiwania: "1 przes" to prosty i szybki algorytm jednoprzesiadkowy. Jego dodatkową zaletą jest dobra jakość wyników, tzn raczej nie ma możliwości żeby dało się szybciej dotrzeć do celu w jednej przesiadce.
Godziny podane w planie połączeń oznaczają moment planowego dotarcia na przystanek lub czas odjazdu (przy oznaczeniu linii, w negatywie). Liczby po prawej obok symboli klepsydry i strzałki to czasy oczekiwania na przystanku i czas jazdy. Bieżący etap jest zaznaczany w miarę upływu czasu. Aktualnie zaznaczony etap podaje zawsze pozostały a nie pełny czas oczekiwania.
Jeżeli algorytm jednoprzesiadkowy nie odnajdzie połączenia lub czujemy, że nie jest ono optymalne, można również użyć algorytmu ogólnego (przycisk "Dowoln"), który nie ogranicza liczby przesiadek. Jest jednak znacznie wolniejszy i w niektórych przypadkach może dawać nieoptymalne wyniki (tzn. wymagające zbyt dużej liczby przesiadek lub zbyt dużego czasu). Często daje jednak lepsze (lepsze czasowo, przy większej liczbie przesiadek) lub takie same jak "1 przes" (o ile istnieje rozwiązanie jednoprzesiadkowe).
W tym przypadku widać, że drugi algorytm znalazł rozwiązanie szybsze (29 minut zamiast 34), ale wymagające dodatkowo przejścia niektórych odcinków na piechotę.
Szybkość działania algorytmów wyszukujących (zwłaszcza tego drugiego) może być przyspieszona przez umieszczenie dodatkowych informacji w bazie danych. Bazy z takim dodatkiem są oczywiście większe. Na ekranie powitalnym przewodasa można odczytać czy baza zawiera takie informacje; symbol +KC oznacza informacje o sasiednich polaczeniach (wykorzystywane w algorytmie 2), +SR to przyspieszenie wyszukiwania linii na przystanku (w obu algorytmach i wielu innych miejscach programu)

W każdej chwili można również wyłączyć każdą z list klikając drugi raz jej przycisk. W widoku bez listy bocznej mogą lepiej mieścić się informacje o odjazdach lub długie nazwy przystanków/linii.

NOWOŚĆ - Jeżeli przycisk "pinezka" (na górze listy) jest "wyciągnięty" lista będzie się sama chowała po chwili od wybrania na niej pozycji.
Czasem w widoku głownym mogą pojawić się dodatkowe ikony:
  • PYTAJNIK - oznacza brak informacji o godzinach odjazdu (na stacjach końcowych nie ma takich informacji)
  • X - oznacza, że linia nie kursuje w tym dniu, chociaż w innym prawdopodobnie tak. na drugiej ilustracji widać przykład z czasem przejazdu - w czwartek nie można dojechać linią 130 do Vogla, chociaż linia ma tam przytanek więc pojawia się na liście.
Można również zażyczyć sobie pokazania sytuacji dla innej godziny lub dnia tygodnia: dzien zmieniamy klikając na nazwę dnia (tu "czw"), a czas - klikając na czas wyświetlony w górnym rogu. Na ilustracji po prawej widać, że w sobotę można już dojechać do celu linią 130.

Zauważmy, że po zmianie czasu lub dnia, deaktywowany jest "zegarek" (ikonka na górze). Jego kliknięcie spowoduje przywrócenie bieżącej godziny i dnia tygodnia i automatyczną aktualizację w miarę upływu czasu.
NOWOŚĆ Lista godzin i przystanków definiuje jaki przystanek (bieżący lub bieżący i docelowy) zostanie automatycznie wybrany o tej porze dnia. Pozycje oznaczone "----" powodują że od tej godziny przypisanie przestaje obowiązywać. Wybierać można tylko przystanki wpisane wcześniej na listę ulubionych (chodziło o to, żeby nie było ich za dużo).
"Przywróć jeżeli minęło < .... min." oznacza, że po ponownym wejściu do programu będzie wybrana ta sama sytuacja, o ile od tamtego momentu nie minęło zbyt wiele czasu. Pozwala to wygodnie wyjść na chwilę do innej aplikacji bez utraty danych a równocześnie zapewnia stały stan początkowy jeżeli włączamy go następnego dnia. Opcja ta ma pierwszeństwo przed sytuacjami przypisanymi do pór dnia (powyżej).
Pozostałe parametry wpływają na działanie algorytmów wyszukiwania przesiadek, pomocny może być zwłaszcza czas rezerwowany ma przesiadke, jego zwiększenie zmniejsza ryzyko że nie zdążymy się przesiąść z powodu spóźnienia ale też może wykluczyć przydatne połączenia.
Parametr liczbowy "Czas spaceru" określa ile razy dłużej zajmuje nam pokonanie odcinka trasy na piechotę w porównaniu do autobusu/tramwaju. Przewodas nie dysponuje żadnymi dodatkowymi informacjami o lokalizacji przystanków, szacowany przez niego czas spaceru jest czasem podróży jakąś liniš pomnożonym przez tę wartość.

Jak to możliwe?

Jeżeli ktoś próbował ściągać rozkłady jazdy z www.ztm.waw.pl na pewno zauważył, że otrzymujemy dość duzy plik RAR, którego wielkośc jest jedak niczym w porównaniu z wielkością tych danych po odpakowaniu. 60 mega!
A więc jak to możliwe, że to wszystko mieści się w pliku pdb o wielkości 140 kilo?
No, przede wszystkim nie wszystko - tak jak pisałem, niektóre informacje nie są przenoszone do bazy (chociaż w obecnej wersji, po dodaniu rozkładów weekendowych jest można powiedzieć, że zdecydowana większość).
Jeżeli przyjmiemy, że pominięte dane to 10%, kompresja danych jest mniej więcej czterystukrotna! Jest to możliwe dzięki bardzo dużej redundancji, z czego zresztą korzysta RAR pakując te pliki z bardzo niezłym wynikiem. Jednak jeszcze lepszą kompresję można uzyskać wykorzystując logiczne zależności między informacjami, czego rar i żaden kompresor nie jest w stanie zrobić automatycznie. Wymagany jest więc specjalny program. Zastosowanie własnych, zaprojektowanych odpowiednio do zastosowania procedur kompresji umożliwia też bardzo szybką dekompresję na Palmie, gdzie nie możemy sobie pozwolić na odpakowanie wszystkiego na starcie (odpowiedni fragment danych jest odpakowywane dopiero w momencie użycia),

Tak wyglądało przetwarzanie danych dla Przewodasa:
60 MB - dane wejściowe - pliki html z www.ztm.waw.pl
6 MB - informacje o trasach i godzinach odjazdóww postaci tekstowej, z usunięciem formatowania, tabelek, ozdobników, itp
2,2 MB - tylko dane
to co powyżej po wczytaniu do kompresora, czyste, niespakowane informacje binarne
700 KB
- po kompresji godzin odjazdów z wykorzystaniem ich wewnętrznego uporządkowania (np regularne odstępy między kolejnymi odjazdami)
140KB
- po kompresji godzin odjazdów z wykorzystaniem wzajemnego podobieństwa odjazdów z różnych przystanków

Taki 140 kilowy plik zawiera informacje o:

W pliku wynikowym pakowane są tak naprawdę tylko godziny odjazdów i to ta kompresja tak bardzo zmniejszyła ilość danych. Nazwy linii i przystanków zajmują jakieś 30 kilo (możnaby się pobawić w pakowanie ich, ale są dostępne bardzo często więc w praktyce musiałyby być cały czas odpakowane czyli sumaryczne zużycie pamięci by wzrosło (pamiętajmy że aplikacje na Palmie korzystają z baz bez kopiowania ich w pamięci a dekompresja wymusiłaby kopiowanie). To samo dotyczy informacji o przebiegu tras.
Można się łątwo przekonać, że jest spory zapas na dalsze ulepszanie algorytmu kompresji, nawet spakowanie pliku wynikowego zipem daje 50% kompresję!

Dane dla innych miast

Przed wydaniem wersji finalnej nie chcę na razie udostępniać publicznie kompresora ani źrodeł programu, ale moge w kazdej chwili wygenerowac bazy dla innych miast. Potrzebni są tylko ochotnicy, którzy wyciągna odpowiednie dane i przekonwertują do prostego formatu tekstowego. Jezeli ktoś ma dostęp do bazy to jest to 5 minut roboty, konwersja z www to czasem niezłe sztuczki, bo strony z rozkładami jazdy bywają cudaczne. Głównym zadaniem przygotowującego dane jest powiązanie tras z przystankami przez identyfikatory numeryczne (numery przystanków w przewodasie mają ciągły zakres numeracji od 0 w górę).

Plik w formacie "standardowym" (z którego konwersja jest juz automatyczna) składa się z linii rozpoczynających się dużymi literami po których następuje tabulator (oznaczany tu jako [tab]) i właściwe dane. Rozpoznawane są następujące rodzaje danych: