Quero fazer um aplicativo que verifique o lugar mais próximo onde o usuário está. Posso obter facilmente a localização do usuário e já tenho uma lista de locais com latitude e longitude.
Qual seria a melhor maneira de saber o local mais próximo da lista em relação à localização do usuário atual.
Não consegui encontrar nada nas APIs do google.
android
geolocation
maps
Chmouel Boudjnah
fonte
fonte
import android.location.Location;
ou qualhttp://developer.android.com/reference/android/location/Location.html
Observe distanceTo ou distanceBetween. Você pode criar um objeto Location a partir de uma latitude e longitude:
fonte
distanceTo
método.Uma solução aproximada (baseada em uma projeção equirretangular), muito mais rápida (requer apenas 1 trigonometria e 1 raiz quadrada).
Esta aproximação é relevante se seus pontos não estiverem muito distantes. Ele sempre superestimará em comparação com a distância real do haversine. Por exemplo, não adicionará mais do que 0,05382% à distância real se a latitude delta ou longitude entre seus dois pontos não exceder 4 graus decimais .
A fórmula padrão (Haversine) é a exata (ou seja, funciona para qualquer par de longitude / latitude na Terra), mas é muito mais lenta , pois precisa de 7 raízes trigonométricas e 2 raízes quadradas. Se seus dois pontos não estiverem muito distantes e a precisão absoluta não for fundamental, você pode usar esta versão aproximada (Equirretangular), que é muito mais rápida, pois usa apenas um trigonométrico e uma raiz quadrada.
Você pode otimizar ainda mais :
Para obter mais informações, consulte: http://www.movable-type.co.uk/scripts/latlong.html
Há uma boa implementação de referência da fórmula Haversine em vários idiomas em: http://www.codecodex.com/wiki/Calculate_Distance_Between_Two_Points_on_a_Globe
fonte
O(n)
. Para umaO(1)
solução, use um índice espacial 2D para aparar as correspondências potenciais antes de calcular a solução exata. Estamos deixando o escopo desta questão :)Existem alguns métodos que você pode usar, mas para determinar qual é o melhor, primeiro precisamos saber se você está ciente da altitude do usuário, bem como da altitude dos outros pontos.
Dependendo do nível de precisão que você procura, você pode consultar as fórmulas Haversine ou Vincenty ...
Essas páginas detalham as fórmulas e, para os menos inclinados à matemática, também fornecem uma explicação de como implementá-las no script!
Fórmula Haversine: http://www.movable-type.co.uk/scripts/latlong.html
Fórmula Vincenty: http://www.movable-type.co.uk/scripts/latlong-vincenty.html
Se você tiver algum problema com qualquer um dos significados das fórmulas, apenas comente e farei o possível para respondê-los :)
fonte
Existem duas maneiras de obter distância entre LatLng.
Veja isso
e em segundo lugar
public float distanceTo (Location dest)
como respondido por praveen.fonte
fonte
Basta usar o seguinte método, passar lat e long e obter a distância em metros:
fonte
você pode obter a distância e o tempo usando a API do Google Maps API do Google Maps
basta passar o JSON baixado para este método, você obterá a distância e o tempo em tempo real entre dois latlong's
fonte
fonte