Ich habe eine Methode entwickelt, die eine Koordinate und einen Bereich (in Meilen) verwendet und eine Liste von Koordinaten zurückgibt, die einen Kreis um den Ursprung bilden. Ich habe anscheinend Fortschritte gemacht, aber ich habe ein Problem damit, den Bereich zu verkleinern.GPS-Koordinaten berechnen, um einen Radius gegebener Größe zu bilden
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);
}
Das Problem, das ich gefunden habe, ist, dass die Konstante ich bin mit der Entfernung in Meilen zu Grad ändert je nach Lage zu sagen .. Ist für die Lösung dieses Problems irgendwelche Vorschläge jemand hat oder eine bessere Mausefalle insgesamt ?
EDIT: Ich stelle fest, sollte, bin ich in Mathe schrecklich :)
Denken Sie daran, dass der Offset-Punkt eine konstante Entfernung von einem festen Punkt ist, würde _seem_ eine Ellipse sein und kein Kreis, wenn Sie ihr lat/lon auf einem Stück Millimeterpapier grafisch darstellen. Dies liegt daran, dass (außer am Äquator) die Entfernung, die von einer Einheit von Lat abgedeckt wird, nicht dieselbe ist wie für eine Einheit von Lon. – JonnyBoats