0

そのため、このポイントへの最短ルートを表示するよりも、開始ポイントと複数のポイントの間の距離を計算したいのですが、常に最後のポイントが表示されます。これは私の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);

誰かが何かアイデアや解決策を持っているなら、私はとても感謝しています。

4

2 に答える 2

0

DirectionsServiceRequestで optimizeWaypoints:true を使用したいようです:

最適化ウェイポイント | ブール値 | true に設定されている場合、DirectionService は、ルートの全体的なコストを最小限に抑えるために、指定された中間ウェイポイントを並べ替えようとします。ウェイポイントが最適化されている場合は、応答の DirectionsRoute.waypoint_order を調べて、新しい順序を決定します。

道順結果

返された各ルートの各区間には、距離と所要時間の情報が含まれています。

于 2013-04-20T20:21:31.463 に答える