이 점에 대한 최단 경로를 표시하는 것보다 시작점과 여러 점 사이의 거리를 계산하고 싶지만 항상 마지막 점을 표시합니다. 이 잘 작동 내 distanceCal 기능입니다 :여러 점 사이의 최단 거리
function getDistanceFromLatLonInKm(lat1, lon1, lat2, lon2) {
var R = 6371; // Radius of the earth in km
var dLat = deg2rad(lat2 - lat1); // deg2rad below
var dLon = deg2rad(lon2 - lon1);
var a =
Math.sin(dLat/2) * Math.sin(dLat/2) +
Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) *
Math.sin(dLon/2) * Math.sin(dLon/2)
;
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
var d = R * c; // Distance in km
return d;
}
function deg2rad(deg) {
return deg * (Math.PI/180)
}
을이 오래/내 포인트 라트입니다 :
var dist = [
[35.733972, -5.881999],
[ 35.734077, -5.881033],
[ 35.736898, -5.877771],
[35.738396, -5.875154]
];
다음 내 스크립트를 표시하는 방향 :
function calcRoute() {
var start = new google.maps.LatLng(35.728329, -5.882750);
for (var i = 0; i < dist.length; i++)
{
var dis = dist[i];
//here i need something to choose the shortest route
var min = Math.min(getDistanceFromLatLonInKm(35.728329, -5.882750, dis[0], dis[1]));
var end = new google.maps.LatLng(dis[0], dis[1]);
}
var request = {
origin: start,
destination: end,
optimizeWaypoints: true,
travelMode: google.maps.DirectionsTravelMode.DRIVING
};
directionsService.route(request, function (response, status) {
if (status == google.maps.DirectionsStatus.OK) {
directionsDisplay.setDirections(response);
}
});
}
google.maps.event.addDomListener(window, 'load', getMap);
그렇게하십시오 경우 누군가 어떤 아이디어 나 해결책을 가지고 있으면 매우 감사 할 것입니다.
예, 모든 루프를 돌릴 때마다 'end'를 선택하고 쓰는 것을 잊었습니다. 그리고 하나의 값에서'Math.min'을 얻는다면? – Bergi
본질적으로 [여행 세일즈맨 문제] (http://en.wikipedia.org/wiki/Travelling_salesman_problem)를 해결해 달라는 요청입니까? – deceze
@deceze 아니오 내 루프에서 실수가 없다. – Mohammadov