He encontrado un método que toma una coordenada y un rango (en millas) y devuelve una lista de coordenadas que forman un círculo alrededor del origen. Parece que he progresado un poco, pero tengo un problema para bajar la parte del rango.Calcular coordenadas GPS para formar un radio de tamaño dado
private const Double LAT_MILE = 0.0144839;
private const Double LONG_MILE = 0.0190693;
public static List<Gps.Coordinate> GetRadius(Double OriginLatitude, Double OriginLongitude, Double Range, int Points)
{
List<Gps.Coordinate> Result = new List<Coordinate>();
//insert a new point
for (int i = 0; i < Points; i++)
{
Result.Add(new Gps.Coordinate()
{
Latitude = ((Range * LAT_MILE) * System.Math.Cos(i)) + OriginLatitude,
Longitude = ((Range * LONG_MILE) * System.Math.Sin(i)) + OriginLongitude
});
}
//sort using nearest neighbor
return SortCoords(ref Result);
}
El problema que he encontrado es que la constante que estoy usando para contar la distancia en millas a grados cambia en función de la ubicación .. ¿Alguien tiene alguna sugerencia para resolver este problema, o una mejor trampa para ratones por completo ?
EDIT: Debo señalar, soy horrible en matemáticas :)
Recuerda que el conjunto puntos a una distancia constante de un punto fijo sería _seem_ ser un elipse y no un círculo si graficaste su latitud/longitud en un papel cuadriculado. Eso es porque (excepto en el ecuador) la distancia cubierta por una unidad de lat no es la misma que para una unidad de lon. – JonnyBoats