Tôi đã phải dành khoảng hai giờ để tìm ra giải pháp bằng @nibot, tôi chỉ cần một phương pháp để tạo một hộp ranh giới với điểm trung tâm và chiều rộng / chiều cao (hoặc bán kính) tính bằng km:
Tôi không hiểu giải pháp về mặt toán học / địa lý. Tôi đã điều chỉnh giải pháp (bằng cách thử và sai) để có được bốn tọa độ:
Bắc:
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);
}
Phía đông:
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);
}
Miền Nam:
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);
}
Hướng Tây:
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);
}