Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Połączenia między-przystankowe
Forum PHP.pl > Forum > PHP
Chillout
Witam

Chciałem zapytać jakie trzeba zbudować zapytanie do bazy żeby wyświetlało kolejno autobusy i przesiadki...
Budowanie takiego skryptu nie jest ciężkie... chodzi o sam fakt zapytania do bazy jak go zbudować...

Na tej stronie jest wstępny szablon jak by to miało wyglądać... http://autobusy-miejskie.com.pl/test.php
Proszę o pomoc co byście mi poradzili nie w sensie kodu tylko w sensie projektowym... jak można połączyć te rzeczy w jednym zapytaniu żebym później mógł spokojnie to połączyć i rozpisać

Gotowe coś takiego jest tutaj http://rozklady.kzkgop.pl/index.php dokładnie jeśli weszła wam strona rozkładu to kliknijcie w górnym menu wyszukaj i konkretnie to chciałem zrobić samemu smile.gif i proszę was o pomoc :]
posiadacz
Proponuję tabele:
- przystanek
- linia
- przystanek_linia

Jeśli chcesz się dowiedzieć jaką linię możesz wykorzystać to wystarczy zapytać o wszystkie linia które mają oba przystanki i posortować po ilości przystanków pomiędzy przystankami które cię interesują albo odległości pomiędzy nimi.

Generowanie tras z przesiadkami jest trudniejsze i nie przychodzi mi do głowy żaden sprytny sposób. Proponuję więc dla każdego przystanku z linii przystanku początkowego pytać czy jeździ nim linia przystanku końcowego - otrzymamy wyniki z jedną przesiadką.
everth
Cytat
Budowanie takiego skryptu nie jest ciężkie...
. Można by się o to kłócić. Pierwsze co mi przychodzi do głowy to algorytm najkrótszej ścieżki Dijkstry (url="http://www.artfulsoftware.com/infotree/queries.php?bw=1680#766"]tutaj[/url] masz przykładową implementację w MySql) i późniejsze dopasowanie do niej połączeń. Ale w dłuższej perspektywie może to produkować dziwne wyniki i nie sprawdzać się.

Zainteresuj się algorytmami trasującymi (artykuł w zasadzie odnosi się do sieci komputerowych, niektóre rozwiązania da się zastosować w sieci komunikacyjnej). Bardziej zbliżony do zagadnienia opis jest na stronie OpenStreetMap. Z tego co wyszczególnili to w PHP nie ma żadnej otwartej implementacji takiego systemu.
Chillout
Wymienię jakie mam zbudowane tabele...

am_linie_zkkm - przechowuje dane na temat każdej z linii jest tu wpisywane z jakiego przystanku rusza i na jakim kończy
am_przystanki_zkkm - przechowuje dane na temat każdego przystanku odpowiednio miasto i nazwa przystanku
am_objaśnienia - przechowuje dane na temat objaśnień, kiedy autobus ma jakiś dopisek przy godzinie ze jedzie inaczej
am_linie_przystanki_zkkm - Przechowuje dane na temat struktury linii, którędy przejeżdża i również objaśnienia są dodawane dla poszczególnej trasy
am_start_kursy - oczywiście tutaj konkretnie opisany kurs danego autobusu, zawiera dane id linii, przystanku, dnia, kierunku, rodzaju trasy oraz o której godzinie wyjeżdża z konkretnego miejsca.

Wszystko to dodawane jest automatycznie poprzez pętle zbudowaną typowo pod dodawanie kursów.

Myślę żeby zrobić to tak zebrać dane na temat tego jaki autobus przejeżdża przez przystanek początkowy, następnie sprawdzić czy dojeżdża do przystanku końcowego, jeśli tak to brak przesiadek i jednym autobusem dotrzemy do celu oczywiście obliczyć czas między przystankiem końcowym a początkowym. Jeśli jednak nie dojeżdża do przystanku końcowego, to zebrać dane na temat tego jakie autobusy przejeżdżają przez przystanek końcowy. Następnie zbadać czy te 2 linie przecinają jakoś swoją trasę. Jeśli tak to ten przystanek ustalić jako przesiadkę, jeśli nie to już gorzej bo trzeba szukać 3 autobusu co oznacza 2 przesiadki. Tylko że takie coś już nie bardzo wiem jak zbudować biggrin.gif.
iwosz
Cytat(Chillout @ 25.01.2011, 18:36:40 ) *
Myślę żeby zrobić to tak zebrać dane na temat tego jaki autobus przejeżdża przez przystanek początkowy, następnie sprawdzić czy dojeżdża do przystanku końcowego, jeśli tak to brak przesiadek i jednym autobusem dotrzemy do celu oczywiście obliczyć czas między przystankiem końcowym a początkowym. Jeśli jednak nie dojeżdża do przystanku końcowego, to zebrać dane na temat tego jakie autobusy przejeżdżają przez przystanek końcowy. Następnie zbadać czy te 2 linie przecinają jakoś swoją trasę. Jeśli tak to ten przystanek ustalić jako przesiadkę, jeśli nie to już gorzej bo trzeba szukać 3 autobusu co oznacza 2 przesiadki. Tylko że takie coś już nie bardzo wiem jak zbudować biggrin.gif.



Hmm, to dość kiepski pomysł lub kiepsko to opisałeś wink.gif "Następnie zbadać czy te 2 linie przecinają jakoś swoją trasę" to sugeruje że szukasz jakiejkolwiek trasy, a przecież użytkownikowi zależy na znalezieniu najkrótszej/najszybszej trasy, więc powinieneś wyznaczyć sobie jakiś mianownik, np. odległość w metrach pomiędzy przystankami i wyznaczać optymalną trasę. Dodatkowo można brać pod uwagę ilość skrzyżowań, świateł itd (podpatrz jak to realizują nawigacje GPS)

ps. polecam przyjrzeć się działaniu jakdojade.pl (oni po prostu wykorzystują dane ZTM/MPK...itd)
everth
O ile się nie mylę to jakdojade.pl jest oparte o OpenTripPlanner - na pierwszy rzut oka to świetny kawał softu, tylko że to głównie Java + kawałki w Pythonie i chyba Perlu.

@iwosz - nie orientujesz się może w jakim formacie (czy w ogóle) ZTM/MPK ma przygotowane rozkłady jazdy?
iwosz
Cytat("everth")
@iwosz - nie orientujesz się może w jakim formacie (czy w ogóle) ZTM/MPK ma przygotowane rozkłady jazdy?


Obstawiam XML ale nie sprawdzałem/korzystałem wink.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.