Przewodas - Rozkład jazdy komunikacji miejskiej dla Palma |
![]() |
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? :-) )
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)
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ę... ;-).
|
Program zrezygnowałem ze słowa "beta", chyba wystarczy że numerek jest mniejszy niż 1.0 :) Jeżeli używasz PocketPC możesz spróbować programu RAiT |
Bazy danych z rozkładamiWarszawa (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:
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) |
|
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) |



Jeżeli udostępniam nową wersję to szkoda byłoby nie dołączyć do niej programiku, który powstał już dawno temu, właśnie z myślą o Przewodasie. Oto ClockSelector Hack! Możnaby zaryzykować twierdzenie, że wszystko na świecie jest wygodniejsze od standardowej wybieraczki czasu w PalmOS'ie. ClockSelector Hack oprócz tego że jest wygodny, wygląda też całkiem miło :-) (na obrazkach obok: PRZED i PO zastosowaniu Hacka)| Korzystając z okazji dziękuję dobrej duszy, która pożyczyła mi swojego palmtopa do czasu aż kupię nowego! :-) |
| Chwilowo dalsze prace nad programem zostały wstrzymane. Grupa miłośników nowych technologii i bezpośrednich kontaktów międzyludzkich odebrała mi palma gdy wieczorową porą używałem go na przystanku :-( |
(na górze ekranu obok tytułu) powoduje utworzenie alarmów informujących o przesiadkach. Jest to dalsze rozszerzenie powyższej funkcji - można zająć się grą/czytaniem/pisaniem na palmie a Przewodas przypomni kiedy i gdzie mamy wysiąść. Alarmy zostaną usunięte automatycznie przy kolejnym wejściu do Przewodasa (chyba że wybierzemy opcję "Pozostaw alarmy").
17.09.2002 - nareszcie nowa wersja - 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:
|
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ść. |
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ów | w postaci tekstowej, z usunięciem formatowania, tabelek, ozdobników, itp |
| to co powyżej po wczytaniu do kompresora, czyste, niespakowane informacje binarne | |
| - po kompresji godzin odjazdów z wykorzystaniem ich wewnętrznego uporządkowania (np regularne odstępy między kolejnymi odjazdami) | |
| - 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ę!
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:
SN [tab] ul.Betonowa SN [tab] Centrum SN [tab] Dworzec PKP |
SN [tab] 0 [tab] ul.Betonowa SN [tab] 1 [tab] Centrum SN [tab] 2 [tab] Dworzec PKP |
RN [tab] 12 Betonowa RN [tab] 12 Centrum |
R [tab] 0 S [tab] 2 S [tab] 1 S [tab] 0 |
RN [tab] 12 Betonowa S [tab] 2 S [tab] 1 S [tab] 0 RN [tab] 12 Dworzec PKP S [tab] 0 S [tab] 1 S [tab] 2 |
RN [tab] 12 Betonowa S [tab] 2 T [tab] 800 815 830 1201 2307 S [tab] 1 T [tab] 802 817 832 1210 1512 S [tab] 0 T [tab] 804 817 832 1212 1513 |
RN [tab] Linia weekendowa S [tab] 2 T0 [tab] T1 [tab] 800 815 830 1201 2307 T2 [tab] 800 815 830 1201 2307 S [tab] 1 T0 [tab] T1 [tab] 802 817 832 1210 1512 T2 [tab] 802 817 832 S [tab] 0 T0 [tab] T1 [tab] 804 817 832 1212 1513 T2 [tab] =T1 |
RN [tab] Linia nocna S [tab] 0 T0 [tab] 2300 2330 000 030 T1 [tab] =T0 T2 [tab] =T1 |
Uwaga! Tomash udostępnił na swojej stronie skrypty (wraz z opisem), którymi wyciąga dane ze stron wrocławskiej komunikacji. Być może przydadzą się w tworzeniu rozwiązania dla innych miast.
Pamiętaj że to tylko wersja beta! Wiele rzeczy nie działa w pełni lub nie jest optymalnie rozwiązanych. Czekam na komentarze i pomysły co do dalszego rozwoju programu!