web-dev-qa-db-fra.com

Vérifier si une latitude et une longitude sont dans un cercle

Voir cette illustration:

enter image description here

Ce que j'aimerais savoir, c'est:

  1. Comment créer une zone (cercle) avec une latitude, une longitude et une distance (10 kilomètres)
  2. Comment vérifier (calculer) si une latitude et une longitude se trouvent à l'intérieur ou à l'extérieur de la zone

Je préférerais que vous puissiez me donner un exemple de code en Java ou spécifiquement pour Android avec Google Maps API V2

14
Peter Warbo

Ce dont vous avez besoin en gros, c’est la distance entre deux points sur la carte:

float[] results = new float[1];
Location.distanceBetween(centerLatitude, centerLongitude, testLatitude, testLongitude, results);
float distanceInMeters = results[0];
boolean isWithin10km = distanceInMeters < 10000;

Si vous avez déjà des objets Location:

Location center;
Location test;
float distanceInMeters = center.distanceTo(test);
boolean isWithin10km = distanceInMeters < 10000;

Voici la partie intéressante de cette API: https://developer.Android.com/reference/Android/location/Location.html

25
flx

Avez-vous parcouru la nouvelle GeoFencing API . Cela devrait vous aider. La mise en œuvre normale prend beaucoup de temps. Ceci devrait vous aider à le mettre en œuvre facilement.

1
Seshu Vinay

voir https://developer.Android.com/reference/Android/location/Location.html

Location areaOfIinterest = new Location;
Location currentPosition = new Location;

areaOfIinterest.setLatitude(aoiLat);
areaOfIinterest.setLongitude(aoiLong);

currentPosition.setLatitude(myLat);
currentPosition.setLongitude(myLong);

float dist = areaOfIinterest.distanceTo(currentPosition);

return (dist < 10000);
1
Android Newbie

Vérifie ça:

 private boolean isMarkerOutsideCircle(LatLng centerLatLng, LatLng draggedLatLng, double radius) {
    float[] distances = new float[1];
    Location.distanceBetween(centerLatLng.latitude,
            centerLatLng.longitude,
            draggedLatLng.latitude,
            draggedLatLng.longitude, distances);
    return radius < distances[0];
}
0
gulab ahirwar

Si vous voulez dire par "Comment créer une zone", que vous souhaitez dessiner la zone sur la carte, vous trouverez un exemple dans la référence de la carte V2 doc pour la classe Circle

Pour vérifier si la distance entre le centre du cercle et votre point est supérieure à 10 km, nous suggérons d’utiliser la méthode statique Location.distanceBetween (...) car elle évite les créations d’objets inutiles.

Voir aussi ici (tout à la fin de la réponse) pour un exemple de code dans le cas où la zone est un polygone plutôt qu'un cercle.

0
user2808624