J'essaie de créer des emplacements aléatoires à proximité de mon emplacement. Ce que je veux, c'est créer des paires de latitude / longitude aléatoires à l'intérieur d'un cercle de 200 mètres entourant mon emplacement.
Voici la formule que j'ai trouvée (avec l'aide des gens de StackOverFlow): (nombre aléatoire entre -1 et 1) * rayon + (ancienne longitude) = nouvelle longitude dans le rayon de l'ancienne longitude
(Nombre aléatoire entre -1 et 1) * rayon + (ancienne latitude) = nouvelle latitude dans le rayon de l'ancienne latitude
Le truc, c'est que quelque chose d'étrange se passe avec mon implémentation car tous les emplacements aléatoires sont trop proches de mon centre de localisation, il semble que la formule ne couvre pas tout le rayon.
Une idée de ce qui pourrait mal avec ma formule?
Modifié pour montrer l'implémentation Java actuelle:
public static Location getLocation(Location location, int radius) {
Random random = new Random();
// Convert radius from meters to degrees
double radiusInDegrees = radius / METERS_IN_DEGREES;
double x0 = location.getLongitude() * 1E6;
double y0 = location.getLatitude() * 1E6;
double u = random.nextInt(1001) / 1000;
double v = random.nextInt(1001) / 1000;
double w = radiusInDegrees * Math.sqrt(u);
double t = 2 * Math.PI * v;
double x = w * Math.cos(t);
double y = w * Math.sin(t);
// Adjust the x-coordinate for the shrinking of the east-west distances
double new_x = x / Math.cos(y0);
// Set the adjusted location
Location newLocation = new Location("Loc in radius");
newLocation.setLongitude(new_x + x0);
newLocation.setLatitude(y + y0);
return newLocation;
}
Je ne suis pas sûr de ce que je fais mal, car les nouveaux emplacements sont créés au milieu de la mer.
Une idée?
random.nextInt(1001)/1000
renverra une valeur supérieure à 1 environ 0,1% du temps. Pourquoi n'utilisez-vous pas random.nextDouble
ou random.nextFloat
? (ii) La multiplication x0
et y0
par 1E6
est plutôt mystérieuse; il ne semble pas que cela produira des résultats corrects.