Je souhaite créer une application qui vérifie l'endroit le plus proche où se trouve un utilisateur. Je peux facilement obtenir la localisation de l'utilisateur et j'ai déjà une liste de lieux avec latitude et longitude.
Quelle serait la meilleure façon de connaître l'emplacement le plus proche de la liste par rapport à l'emplacement actuel de l'utilisateur.
Je n'ai rien trouvé dans les API google.
android
geolocation
maps
Chmouel Boudjnah
la source
la source
import android.location.Location;
ou laquellehttp://developer.android.com/reference/android/location/Location.html
Regardez à distanceÀ ou à distanceEntre. Vous pouvez créer un objet Location à partir d'une latitude et d'une longitude:
la source
distanceTo
méthode.Une solution approchée (basée sur une projection équirectangulaire), beaucoup plus rapide (elle ne nécessite que 1 trig et 1 racine carrée).
Cette approximation est pertinente si vos points ne sont pas trop éloignés. Il surestimera toujours par rapport à la distance transversale réelle. Par exemple, il n'ajoutera pas plus de 0,05382% à la distance réelle si le delta de latitude ou de longitude entre vos deux points ne dépasse pas 4 degrés décimaux .
La formule standard (Haversine) est la formule exacte (c'est-à-dire qu'elle fonctionne pour n'importe quel couple de longitude / latitude sur terre) mais elle est beaucoup plus lente car elle nécessite 7 racines trigonométriques et 2 racines carrées. Si vos deux points ne sont pas trop éloignés et que la précision absolue n'est pas primordiale, vous pouvez utiliser cette version approximative (équirectangulaire), qui est beaucoup plus rapide car elle n'utilise qu'une seule trigonométrique et une racine carrée.
Vous pouvez optimiser cela davantage en:
Pour plus d'informations, voir: http://www.movable-type.co.uk/scripts/latlong.html
Il existe une belle implémentation de référence de la formule Haversine dans plusieurs langues à l' adresse : http://www.codecodex.com/wiki/Calculate_Distance_Between_Two_Points_on_a_Globe
la source
O(n)
. Pour uneO(1)
solution, utilisez un index spatial 2D pour réduire les correspondances potentielles avant de calculer la solution exacte. On sort du cadre de cette question :)Vous pouvez utiliser plusieurs méthodes, mais pour déterminer laquelle est la meilleure, nous devons d'abord savoir si vous connaissez l'altitude de l'utilisateur, ainsi que l'altitude des autres points.
En fonction du niveau de précision que vous recherchez, vous pouvez vous pencher sur les formules Haversine ou Vincenty ...
Ces pages détaillent les formules et, pour les moins inclinés mathématiquement, expliquent également comment les implémenter dans un script!
Formule Haversine: http://www.movable-type.co.uk/scripts/latlong.html
Vincenty Formula: http://www.movable-type.co.uk/scripts/latlong-vincenty.html
Si vous rencontrez des problèmes avec l'une des significations des formules, il suffit de commenter et je ferai de mon mieux pour y répondre :)
la source
Il existe deux façons d'obtenir la distance entre LatLng.
Regarde ça
et deuxieme
public float distanceTo (Location dest)
comme répondu par praveen.la source
la source
Utilisez simplement la méthode suivante, passez-le lat et long et obtenez la distance en mètre:
la source
vous pouvez obtenir la distance et le temps à l'aide de l'API google Map API Google Map
il suffit de passer le JSON téléchargé à cette méthode, vous obtiendrez la distance et le temps en temps réel entre deux latlong
la source
la source