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

Wyświetlanie odległości między miastami - pobierać z api czy przechowywać w bazie?
A1
  • Rejestracja:ponad 12 lat
  • Ostatnio:około 3 lata
  • Postów:311
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.

Alex Kowalski
Oto dobry przykład obliczenia odległości między miastami Polski - http://mapszoom.com/odleglosc/
MK
  • Rejestracja:ponad 10 lat
  • Ostatnio:prawie 10 lat
  • Postów:33
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.


edytowany 1x, ostatnio: mkr
Alex Kowalski
Oto dobry przykład obliczenia odległości między miastami Polski - http://mapszoom.com/odleglosc/
Koziołek
Moderator
  • Rejestracja:prawie 18 lat
  • Ostatnio:około miesiąc
  • Lokalizacja:Stacktrace
  • Postów:6821
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.


Sięgam tam, gdzie wzrok nie sięga… a tam NullPointerException
A1
  • Rejestracja:ponad 12 lat
  • Ostatnio:około 3 lata
  • Postów:311
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

KA
robisz drugiego tindera xd ;? ;D
Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
0

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


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
A1
  • Rejestracja:ponad 12 lat
  • Ostatnio:około 3 lata
  • Postów:311
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

szalonyfacet
  • Rejestracja:ponad 12 lat
  • Ostatnio:9 miesięcy
  • Lokalizacja:Dąbrowa Górnicza
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

A1
a skad mam wziac współrzędne geograficzne wszystkich miast + miejscowosci w PL ?
szalonyfacet
z wszeochobecnego internetu :)
Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
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...


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
A1
  • Rejestracja:ponad 12 lat
  • Ostatnio:około 3 lata
  • Postów:311
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

Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
0

To źle pobrałeś.


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
A1
chciałem pobrać teraz wybierając przy eksporcie "Polska - granica kraju" to nie pokazało przycisku "Eksportuj", tylko info że za duży obszar i nie można pobrać...
datdata
  • Rejestracja:prawie 11 lat
  • Ostatnio:prawie 7 lat
  • Postów:957
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


"A human being should be able to change a diaper, plan an invasion, butcher a hog, conn a ship, design a building, write a sonnet, balance accounts, build a wall, set a bone, comfort the dying, take orders, give orders, cooperate, act alone, solve equations, analyze a new problem, pitch manure, program a computer, cook a tasty meal, fight efficiently, die gallantly. Specialization is for insects." Robert Heinlein.
Alex Kowalski
Oto dobry przykład obliczenia odległości między miastami Polski - http://mapszoom.com/odleglosc/
RE
Moderator
  • Rejestracja:około 18 lat
  • Ostatnio:11 miesięcy
0

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

A1
  • Rejestracja:ponad 12 lat
  • Ostatnio:około 3 lata
  • Postów:311
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ć?

edytowany 1x, ostatnio: adriano1995
Koziołek
to jest odległość minimum. Zatem zapewne niedoszacowanie o 15-30% w zalezności jakie to są zadupia i jakie są remonty na drogach :D
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)