Я пытаюсь найти прямое расстояние от точки С до пляжа.Линия пляжа определяется точками A и B, и по формуле Haversine я получаю расстояние от C (мой маркер в Google Maps) до точки D на линии пляжа AB, перпендикулярной C.
Все работает нормально, ноточка D не правильная.Я использую этот код, чтобы найти D:
function get_perp(C){
var A = { lat:33.345678, lng:-117.518921 };
var B = { lat:33.100678, lng:-117.318492 };
t = ((C.lat-A.lat)*(B.lat-A.lat)+(C.lng-A.lng)*(B.lng-A.lng))/((B.lat-A.lat)*(B.lat-A.lat)+(B.lng-A.lng)*(B.lng-A.lng));
var D = { lat:0,lng:0};
D.lat = A.lat + t*(B.lat-A.lat);
D.lng = A.lng + t*(B.lng-A.lng);
return D;
}
Возвращенная точка D действительно является точкой на линии, но она не перпендикулярна C. Это когда линия AB горизонтальная или вертикальная, но когда онане угол между AB и CD неправильный.
Я пробовал другие функции, которые я нашел здесь, но все они вызывают один и тот же результат.
В этой скрипке это целоепроцесс и если вы достаточно масштабируете, вы можете видеть, что линии AB и CD не перпендикулярны: Кратчайшее расстояние от AB до C
РЕДАКТИРОВАТЬ: играя с ним в геогебре, я вижу, что функция в порядкев поиске смысла.Ошибка происходит тогда, когда Google Maps API представляет точку. GeoGebra