Я написал этот метод расширения для IPoint.Вычисление координаты по углу и расстоянию от координаты
public static IPoint Offset(this IPoint point, double angle, double distanceInMeters)
{
var radians = Math.PI * angle/180;
var distanceX = distanceInMeters * Math.Cos(radians);
var distanceY = distanceInMeters * Math.Sin(radians);
var earthRadius = 6371000;
var y = point.Y + ((distanceY/earthRadius) * 180/Math.PI);
var x = point.X + ((distanceX/(earthRadius * Math.Cos(y * 180/Math.PI))) * 180/Math.PI);
return new Point(x, y);
}
Он отлично работает, когда я ставлю в угол 0, 90, 180 и 270, то возвращают координаты в заданном расстоянии от начальной точки. Но когда я начинаю идти под углом, который не указывает точно Север, Восток и т. Д. Я получаю неправильные расстояния.
Где я могу пойти не так? Альтернатива Есть некоторые библиотеки для использования?
Не совсем уверен в этом ... но ... остерегайтесь потенциального целочисленного деления – Ian
'int angle' ??? 'Double angle' - очень возможно иметь, скажем,' 30.51' степень –
Попробовать * отладка *. Во-первых, что происходит не так - если угол '90' в порядке, попробуйте добавить небольшое * нарушение *, скажем,' 91' степени : у вас есть дополнительный * выигрыш * или * потеря * на 'distanceX'? Что относительно 'distanceY'? Продолжайте с '89' степени; затем положите '45' - * точно * перед случаями' 0' и '90' ... –