Я использовал сайт Moveable-Type, чтобы помочь мне в некоторых вычислениях Geocoordinate, и это было очень полезно, однако, у меня есть ошибка в моем вычислении средней точки между двумя координатами.Мой результат близок к ожидаемому, но недостаточно близок:
posA = {47.64570362, -122.14073746}
posB = {47.64316917, -122.14032175}
ожидаемый результат (взят из калькулятора подвижного типа) = 47 ° 38′40 ″ с.ш., 122 ° 08′26 ″ W = {47.644444, -122.140556}
мой результат: {49.6054801645915, -122.14052959995759}
Вот мой код:
private Geocoordinate MidPoint(Geocoordinate posA, Geocoordinate posB)
{
Geocoordinate midPoint = new Geocoordinate();
double dLon = DegreesToRadians(posB.Longitude - posA.Longitude);
double Bx = Math.Cos(DegreesToRadians(posB.Latitude)) * Math.Cos(dLon);
double By = Math.Cos(DegreesToRadians(posB.Latitude)) * Math.Sin(dLon);
midPoint.Latitude = RadiansToDegrees(Math.Atan2(Math.Sin(DegreesToRadians(posA.Latitude)) + Math.Sin(DegreesToRadians(posB.Latitude)),
Math.Sqrt((Math.Cos(DegreesToRadians(posA.Latitude)) + Bx) * (Math.Cos(DegreesToRadians(posA.Latitude))) + Bx) + By * By));
midPoint.Longitude = posA.Longitude + RadiansToDegrees(Math.Atan2(By, Math.Cos(DegreesToRadians(posA.Latitude)) + Bx));
return midPoint;
}
У меня есть несколько частных методов для преобразования между градусами и радианами и обратно.Например,
private double DegreeToRadian(double angle)
{
return Math.PI * angle / 180.0;
}
Я не могу понять, почему мои результаты отклонены на пару градусов от значения Lat.Есть идеи?
Спасибо