Wyświetlanie odległości między miastami - pobierać z api czy przechowywać w bazie?

0

Witam. Chcę na stronie w profilu użytkownika wyświetlać odległość od jego miasta do mojego (ja przeglądam jego profil obecnie). Chciałbym się Was poradzić, jak lepiej jest zrobić w takim przypadku. Czy za każdym razem po przejściu na stronę profilu mam obliczać przez API Google tę odległość czy może lepiej gdybym miał w bazie danych tabelę z odległościami każdego miasta do wszystkich miast (czy te odległości można zdobyć z jakiejś innej strony, czy da radę wyciągnąć przez API Google'a) ? (Moja baza to MySQL)

Z góry dziękuję za pomoc.

0

Odległości mają być w linii prostej czy po drogach?

Jeżeli to pierwsze to sprawa się upraszcza do obliczania odległości pomiędzy dwoma współrzędnymi gps. Trzymasz w bazie kolumnę odpowiadającą lokalizacji gps dla każdego użytkownika. Tutaj masz jak obliczyć taką odległość: www.movable-type.co.uk/scripts/latlong.html

Sprawa się komplikuje jeżeli mają to być odległości drogowe. Wtedy masz opcje:

  • masz graf sieci drogowej (mało realne) i obliczasz najkrótszą drogę jak google - ogólnie strzelanie armatą do muchy;
  • każdorazowo korzystasz z api przy odwiedzaniu profilu, co może skutkować lagiem;
  • robisz jednorazowo tablice odległości pomiędzy lokalizacjami użytkowników w oparciu o jakieś api. W przypadku nowego użytkownika z nową lokalizacją uzupełniasz ww. tablicę. W przypadku odwiedzenia profilu wyszukujesz tylko odpowiednie odległości ze swojej tablicy. Rozmiary takiej tablicy nie muszą być duże, przykładowo załóżmy, że dla 10000 użytkowników będziesz miał 1000 unikalnych lokalizacji, wtedy rozmiary tej tablicy to 1000^2, a ilość możliwych kombinacji 500*499.

Edit: poprawiona ilość kombinacji.

0

Kilka opcji już wymieniono, ale jak dla mnie można to uprościc do jednorazowego wyliczenia z użyciem API i składowania wyniku w bazie. Łatwe, proste, przyjemne. Jedyne co trzeba zrobić to wykombinować jak często należy usuwać wpisy z tabeli, bo jak wiadomo trasy prejazdu mają tendencje do zmiany.

0

@Koziołek właściwie nie musi być ta odległość taka dokładna. Ma być coś takiego - patrzę na ilość KM w tym profilu i "O ta dziewczyna ma do mnie 50 KM - niedaleko" - tego entuzjazmu chyba nie zepsuje różnica ok. 10 KM ;d

0

Pomysł z google maps słaby. Zbanują cię raz dwa jak twój serwis zrobi się choć troszkę popularny. Pomyśl o OpenStreetMap

0

@Shalom nakierujesz na coś konkretnego do OpenStreetMap abym mógł pobrać odległości dla miast z Polski? Sprawdziłem strony ich projektu (org, pl, wiki, osm), ale znalazłem tylko pliki do pobrania z danymi dla całej planety (nie dla regionu), które chyba ważą około 30 GB, i podobno z tego można jakimś skryptem czy programem odfiltrować to co potrzeba... Nie dam rady pobrać 30 GB z moim netem... - nawet miejsca na dysku tyle nie znajde ;d

0
adriano1995 napisał(a):

@Koziołek właściwie nie musi być ta odległość taka dokładna. Ma być coś takiego - patrzę na ilość KM w tym profilu i "O ta dziewczyna ma do mnie 50 KM - niedaleko" - tego entuzjazmu chyba nie zepsuje różnica ok. 10 KM ;d

to skoro niedokladnosc tego rzedu jest wystarczajaca to czemu chcesz sie bawic z mapami (ktorych zaprzeganie jest potrzebne dla duzej dokladnosci) a nie policzysz tego z wzoru na odleglosc miedzy dwoma punktami geograficznymi. wyzej masz link.

po drugie google w wersji free daje ci 100 000 zapytan na dobe. jak to ladnie bedziesz cachowal w bazie to wierz mi ze jesli serwis bedzie ci generowal 100 000 unikalnych obliczen odleglosci miedzy dwoma miastami (bo o miastach tu mowisz) to bedzie on na tyle duzy ze zarobi nawet na licnencje dla googla ktora ta ci wiekszy limit.

PS. KM to konie mechancizne , km to kilometry:P

0

@adriano1995 ty tak poważnie? Wchodzisz na http://www.openstreetmap.org/ po prawej masz guzik "eksportuj". Klikasz go, wybierasz obszar który cię interesuje i voila...

0

@Shalom pobrałem tak jak napisałeś, ale nie ma tego czego chciałem (np. z woj. mazowieckiego tylko 1 gmine pokazuje...) - plik który pobrałem miał 11 KB

0

To źle pobrałeś.

0

Skoro dokładność nie jest kluczowa, to olej jakiekolwiek przechowywanie odległości.

Tutaj masz web-service od googla, który zwraca współrzędne:

http://maps.google.com/maps/api/geocode/json?address=wiejska%201%20warszawa
https://developers.google.com/maps/documentation/geocoding/

Jeśli będziesz pobierał je tylko przy rejestracji to nie powinni Cię ubić - 2500 zapytań na dobę jest darmowe ;)

A na podstawie współrzędnych jesteś w stanie policzyć szacunkową odległość miedzy punktami.
Tu masz wzorki:

http://www.movable-type.co.uk/scripts/latlong.html

0

http://www.codgik.gov.pl/index.php/darmowe-dane/prng.html
Z Excela przerzucisz te dane do bazy w moment.

0

obliczając dystans (między miejscowościami/miastami) z punktu A do punktu B, będzie to dystans po linii prostej. Jak duże rozbieżności mogą wystąpić?

1 użytkowników online, w tym zalogowanych: 0, gości: 1