Chcę stworzyć aplikację, która sprawdza najbliższe miejsce, w którym przebywa użytkownik. Mogę łatwo uzyskać lokalizację użytkownika i mam już listę miejsc z długością i szerokością geograficzną.
Jaki byłby najlepszy sposób na sprawdzenie najbliższego miejsca na liście w porównaniu z bieżącą lokalizacją użytkownika.
Nie mogłem znaleźć nic w Google API.
android
geolocation
maps
Chmouel Boudjnah
źródło
źródło
import android.location.Location;
a którąhttp://developer.android.com/reference/android/location/Location.html
Spójrz na distanceTo lub distanceBetween. Możesz utworzyć obiekt Location na podstawie szerokości i długości geograficznej:
źródło
distanceTo
metoda.Rozwiązanie przybliżone (oparte na rzucie równokątnym), znacznie szybsze (wymaga tylko 1 tryg. I 1 pierwiastka kwadratowego).
To przybliżenie jest istotne, jeśli Twoje punkty nie są zbyt daleko od siebie. To zawsze będzie zawyżone w porównaniu z rzeczywistą odległością haversine. Na przykład doda nie więcej niż 0,05382% do rzeczywistej odległości, jeśli różnica szerokości lub długości geograficznej między dwoma punktami nie przekracza 4 stopni dziesiętnych .
Standardowa formuła (Haversine) jest dokładna (to znaczy działa dla dowolnej długości / szerokości geograficznej na Ziemi), ale jest znacznie wolniejsza, ponieważ wymaga 7 pierwiastków trygonometrycznych i 2 pierwiastków kwadratowych. Jeśli kilka punktów nie jest zbyt daleko od siebie, a absolutna precyzja nie jest najważniejsza, możesz użyć tej przybliżonej wersji (Equirectangular), która jest znacznie szybsza, ponieważ wykorzystuje tylko jeden trygonometryczny i jeden pierwiastek kwadratowy.
Możesz to dalej zoptymalizować, wykonując jedną z następujących czynności:
Więcej informacji można znaleźć pod adresem : http://www.movable-type.co.uk/scripts/latlong.html
Istnieje ładna implementacja referencyjna formuły Haversine w kilku językach pod adresem : http://www.codecodex.com/wiki/Calculate_Distance_Between_Two_Points_on_a_Globe
źródło
O(n)
. Aby uzyskaćO(1)
rozwiązanie, użyj indeksu przestrzennego 2D, aby przyciąć potencjalne dopasowania przed obliczeniem dokładnego rozwiązania. Wychodzimy z zakresu tego pytania :)Jest kilka metod, których możesz użyć, ale aby określić, która z nich jest najlepsza, najpierw musimy wiedzieć, czy znasz wysokość użytkownika, a także wysokość innych punktów?
W zależności od pożądanego poziomu dokładności możesz przyjrzeć się formułom Haversine lub Vincenty ...
Te strony wyszczególniają formuły, a dla mniej skłonnych matematycznie zawierają również wyjaśnienie, jak zaimplementować je w skrypcie!
Haversine Formula: http://www.movable-type.co.uk/scripts/latlong.html
Vincenty Formula: http://www.movable-type.co.uk/scripts/latlong-vincenty.html
Jeśli masz jakiekolwiek problemy z którymkolwiek ze znaczeń w formułach, po prostu skomentuj, a ja postaram się na nie odpowiedzieć :)
źródło
Istnieją dwa sposoby uzyskania odległości między LatLng.
Zobacz
i drugi
public float distanceTo (Location dest)
jak odpowiedział praveen.źródło
źródło
Po prostu użyj następującej metody, podaj szerokość i długość i uzyskaj odległość w metrach:
źródło
możesz uzyskać odległość i czas za pomocą Google Map API Google Map API
po prostu prześlij pobrany plik JSON do tej metody, a otrzymasz w czasie rzeczywistym odległość i czas między dwoma latlongami
źródło
źródło