Musiałem poświęcić około dwóch godzin na wypracowanie rozwiązania @nibota, po prostu potrzebowałem metody tworzenia ramki granicznej, biorąc pod uwagę jej środek i szerokość / wysokość (lub promień) w kilometrach:
Nie rozumiem rozwiązania matematycznie / geograficznie. Poprawiłem rozwiązanie (metodą prób i błędów), aby uzyskać cztery współrzędne:
Północ:
private static Position FromKmToNPosition(Position p, double km)
{
double r_earth = 6378;
var pi = Math.PI;
var new_latitude = p.Lat + (km / r_earth) * (180 / pi);
return new Position(new_latitude, p.Long);
}
Wschód:
private static Position FromKmToEPosition(Position p, double km)
{
double r_earth = 6378;
var pi = Math.PI;
var new_longitude = p.Long + (km / r_earth) * (180 / pi) / Math.Cos(p.Lat * pi / 180);
return new Position(p.Lat, new_longitude);
}
Południe:
private static Position FromKmToSPosition(Position p, double km)
{
double r_earth = 6378;
var pi = Math.PI;
var new_latitude = p.Lat - (km / r_earth) * (180 / pi);
return new Position(new_latitude, p.Long);
}
Zachód:
private static Position FromKmToWPosition(Position p, double km)
{
double r_earth = 6378;
var pi = Math.PI;
var new_longitude = p.Long - (km / r_earth) * (180 / pi) / Math.Cos(p.Lat * pi / 180);
return new Position(p.Lat, new_longitude);
}