Sto cercando di creare posizioni casuali nelle vicinanze della mia posizione. Quello che voglio è creare coppie casuali di latitudine / longitudine all'interno di un cerchio di 200 metri che circonda la mia posizione.
Questa è la formula che mi è venuta in mente (con l'aiuto delle persone su StackOverFlow): (Numero casuale compreso tra -1 e 1) * raggio + (vecchia longitudine) = nuova longitudine nel raggio della vecchia longitudine
(Numero casuale compreso tra -1 e 1) * raggio + (vecchia latitudine) = nuova latitudine nel raggio della vecchia latitudine
Il fatto è che qualcosa di strano sta accadendo con la mia implementazione perché tutte le posizioni casuali sono troppo vicine al mio centro di localizzazione, sembra che la formula non copra l'intero raggio.
Qualche idea di cosa potrebbe esserci di sbagliato nella mia formula?
Modificato per mostrare l'attuale implementazione java:
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;
}
Non sono sicuro di cosa sto facendo di sbagliato, perché le nuove posizioni sono create in mezzo al mare.
Qualche idea?
random.nextInt(1001)/1000
restituirà un valore maggiore di 1 circa lo 0,1% delle volte. Perché non stai usando random.nextDouble
o random.nextFloat
? (ii) Moltiplicare x0
e y0
da 1E6
è piuttosto misterioso; non sembra che produrrà risultati corretti.