I am trying to create random locations nearby my location. What i want is to create random latitude/longitude pairs inside a 200 meters circle surrounding my location.
This is the formula i came up with (with the help of people at StackOverFlow): (Random number between -1 and 1)*radius + (old longitude) = new longitude within radius of old longitude
(Random number between -1 and 1)*radius + (old latitude) = new latitude within radius of old latitude
The thing is that something weird is happening with my implementation because all the random locations are too near of my location center, it seems that the formula does not cover the whole radius.
Any idea of what could be wrong with my formula?
Edited to show the current java implementation:
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;
}
I am not sure what i am doing wrong, because the new locations are created in the middle of the sea.
Any idea?
random.nextInt(1001)/1000
will return a value greater than 1 about 0.1% of the time. Why aren't you usingrandom.nextDouble
orrandom.nextFloat
? (ii) Multiplyingx0
andy0
by1E6
is rather mysterious; it does not seem like it will produce correct results.