2

お時間をいただきありがとうございます。

簡単に:

  • 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ポイントだけ毎回すべてを再計算するのは奇妙に思えます。

解決策に近づいているように感じますが、理解できません。任意の提案をいただければ幸いです。ありがとうございました。

4

1 に答える 1

0

ドラッグによるルート案内を自分で実装する必要はありません。これは 2010 年以降、JavaScript API v3 の一部になっています。ウェイポイントにマーカーを配置できますが、ルート内の任意のポイントをドラッグできます。

https://developers.google.com/maps/documentation/javascript/examples/directions-draggable https://developers.google.com/maps/documentation/javascript/directions#DruggableDirections

于 2016-07-07T11:52:03.903 に答える