お時間をいただきありがとうございます。
簡単に:
- Google MapsAPIV3プロジェクト
- 地図をクリックしてマーカーを配置します
- 道順サービスは、2つの連続するポイント間のルートを計算します
ゴール:
マーカーの1つをドラッグしたときに、ルートを再計算します。
進捗:
これまでのところ、私はこのページを組み立てました:http: //test.bluecactus.ro/gmaps.html。私はほとんどのコードにコメントしました。
問題:
ページは最初のドラッグで問題なく動作します。2番目のマーカーをドラッグするか、最初のマーカーをもう一度ドラッグすると、ポリラインは本来の方法で「再生成」されなくなります(着信と発信を削除し、新しい位置から計算し、マップにプロットします)。
同じマーカーを複数回ドラッグすると、削除する必要のあるポリラインがマップ上に残ります。2番目のマーカーをドラッグすると、間違ったポリラインが削除されます。
これにより、すべてのマーカーを保持している配列内のドラッグされたマーカーの位置を特定するのに何か問題があると思いました。以下の機能。私は「数学」を数回やり直しました-紙の上ではそれは大丈夫のようです。すべてをforループの外に置き、ループを使用してグローバル変数内の位置を特定しようとしました。それらのどれも機能しませんでした。
http://test.bluecactus.ro/gmaps.html
google.maps.event.addListener(marker, 'dragend', function(event) { //ondrag
for (var i = 0; i < gmarkers.length; i++) {
if(gmarkers[i].getPosition() == marker.getPosition()) { //find out array position of current marker
console.log("i = " + i);
//hide incoming and outgoing polylines; polylines index offset by -1 (n markers => n-1 polylines)
gpolys[i-1].setMap(null);
gpolys[i].setMap(null);
drawPath(gmarkers[i-1].getPosition(), marker.getPosition()); //calculate route between moved marker and previous point
drawPath(marker.getPosition(), gmarkers[i+1].getPosition()); //calculate route between moved marker and next point
//overwrite initial polylines; drawPath function automatically adds new polylines to end of gpolys array
gpolys[i-1] = gpolys[gpolys.length-2];
console.log(gpolys);
gpolys[i] = gpolys[gpolys.length-1];
console.log(gpolys);
//delete last 2 elements from gpolys
gpolys.pop();
console.log(gpolys);
gpolys.pop();
console.log(gpolys);
}
}
});
注:
- 最初と最後のマーカーは機能しません。現時点では処理されません。
- いくつかの回避策を見つけました。ドラッグ時にルート全体を再計算します。配列内のすべてのマーカーを取得し、iとi+1の間にプロットします。ただし、これは小さいルートでのみ機能し、高速にドラッグする必要はありません。そうしないと、OVER_QUERY_LIMITがヒットします。呼び出し間の遅延で解決できますが、1ポイントだけ毎回すべてを再計算するのは奇妙に思えます。
解決策に近づいているように感じますが、理解できません。任意の提案をいただければ幸いです。ありがとうございました。