Estoy tratando de crear ubicaciones aleatorias cerca de mi ubicación. Lo que quiero es crear pares aleatorios de latitud / longitud dentro de un círculo de 200 metros que rodea mi ubicación.
Esta es la fórmula que se me ocurrió (con la ayuda de personas en StackOverFlow): (Número aleatorio entre -1 y 1) * radio + (longitud anterior) = longitud nueva dentro del radio de longitud anterior
(Número aleatorio entre -1 y 1) * radio + (latitud anterior) = nueva latitud dentro del radio de la latitud anterior
Lo que pasa es que algo extraño está sucediendo con mi implementación porque todas las ubicaciones aleatorias están demasiado cerca de mi centro de ubicación, parece que la fórmula no cubre todo el radio.
¿Alguna idea de lo que podría estar mal con mi fórmula?
Editado para mostrar la implementación actual de 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;
}
No estoy seguro de lo que estoy haciendo mal, porque las nuevas ubicaciones se crean en medio del mar.
¿Alguna idea?
random.nextInt(1001)/1000
devolverá un valor mayor que 1 aproximadamente 0.1% del tiempo. ¿Por qué no estás usando random.nextDouble
o random.nextFloat
? (ii) Multiplicar x0
y y0
por 1E6
es bastante misterioso; no parece que produzca resultados correctos.