以下のコードは3つの可能なルートを与えていますが、私は最短パス(直線ではありません)を得たいと思いますが、3つのルートの中のパスを取得したいと思います。グラフの実装とDijkstraアルゴリズムを使用して、最短パスを取得するだけです。DijkstraアルゴリズムをGoogleマップに適用して、2点間の最短経路を見つける方法は?
var directionsService = new google.maps.DirectionsService();
var myOptions = {
zoom: 7,
mapTypeId: google.maps.MapTypeId.ROADMAP
}
var map = new google.maps.Map(document.getElementById("map"), myOptions);
var st = new google.maps.LatLng(33.7294, 73.0931);
var en = new google.maps.LatLng(34.0150, 71.5805);
var request = {
origin: st,
destination: en,
travelMode: google.maps.DirectionsTravelMode.DRIVING,
// Returns multiple routes
provideRouteAlternatives: true
};
directionsService.route(request, function (response, status) {
if (status == google.maps.DirectionsStatus.OK) {
console.log(response.routes);
// Create a new DirectionsRenderer for each route
for (var i = 0; i < response.routes.length; i++) {
var dr = new google.maps.DirectionsRenderer();
dr.setDirections(response);
// Tell the DirectionsRenderer which route to display
dr.setRouteIndex(i);
dr.setMap(map);
// Display the distance:
document.getElementById('distance').innerHTML += "Route " + i + ": " +
(response.routes[i].legs[0].distance.value)/1000 + "killo meters, ";
console.log((response.routes[i].legs[0].distance.value)/1000 + "killo meters");
// Display the duration:
document.getElementById('duration').innerHTML += "Route " + i + ": " +
response.routes[i].legs[0].duration.value + " seconds, ";
console.log(response.routes[i].legs[0].duration.value + " seconds");
}
}
});
のためにあなたを助けるかもしれません。 GoogleはすでにDijkstraのアルゴリズムまたはその変形を使用して最短経路を見つけています。返されたものから最短のものを探したいのですか、それとも自分で再計算しますか?私はGoogleが道路のグラフを公開しているとは思わないので、私は後者が可能だとは思わない。 – jcaron
1.距離と交差点とともに、Google Map APIから2つのポイント間のルートをすべて取得します。 2.グラフを作成し、グラフ上のすべてのルートをマップします。 3. Dijaskeraのアルゴリズムをプログラミングし、グラフ上で実行すると、最短の最短経路が得られます。 – Ali
あなたが解決しようとしている実際の問題は何かをお知らせください。 Google Maps APIから「2つのポイント間のすべての可能なルート」を取得することはできません。可能なルートの選択肢が得られますが、それらのすべてではありません。 Google側ですでにSPFアルゴリズムのいくつかの形式を実行していますが、なぜもう一度やりたいのですか?最短距離を(距離の点で)求めたい場合は、返されたデータを使って最短距離を見つけることができます。何かを再計算する必要はありません。 – jcaron