0

私は問題に直面しています...そして解決策やアイデアを探しています。複数のオブジェクト(マーカー、ポリラインなど)を同時にドラッグアンドドロップしたいのですが、これが可能かどうかわかりません...

誰かアイデアがありますか?

前もって感謝します !よろしく、セバスチャン


ありがとうニルス!!! あなたは私に良い方法を与えます!ここに私がそれを可能にした方法があります:

google.maps.event.addListener(window["Overlay" + i] , 'click', function(event) {
var path = this.getPath();
google.maps.event.addListener(path, 'set_at', function(indEdited,newLatLng){
        var oo = this.getAt(indEdited);
        diffLat = (newLatLng.lat() - oo.lat());
        diffLng = (newLatLng.lng() - oo.lng());
        moveOverlay(this,indEdited,diffLat,diffLng);
       var temp = "Do you want to me the others overlays ?"
        if (fromPath == lastPath )
        {
            if ( confirm(temp) ){
                moveOthersOverlays(diffLat,diffLng);
            }
        }
    }); 
});
4

1 に答える 1

1

問題は、ドラッグアンドドロップできるのはマーカーだけなので、これを念頭に置いて機能を設計する必要があることです。

まず、開始位置に移動する必要があります。これは、dragstartイベントを使用して行われます。すべてのマーカーでこれを行う必要があることに注意してください。

var startLatLng;
google.maps.event.addListener(marker, 'dragstart', function(){
  marker.getPosition()
});

ドラッグイベント機能を利用して、すべてのオブジェクトをループします。ここでは擬似コードを利用しますが、不明な点がある場合はお知らせください。マーカーを配列に保存することを前提としています

google.maps.event.addListener(dragmarker, 'drag', function(){
   end = dragmarker.getPosition();
   for (marker in markers){
      // Don't care about marker being dragged
      if (dragmarker == marker)
          continue;
      current = marker.getPossition();
      // Bellow we create a new position for the marker by calculating the difference 
      // and add it to the current possition of the marker
      marker.setPosition(new google.maps.LatLng(
                    current.lat() + (end.lat() - start.lat()), 
                    current.lng() + (end.lng() + start.lng()));
   }

   // Same same for the polylines but you will have to loop over the path
});

移動しているオブジェクトがたくさんある場合、これは非常に遅くなることに注意してください。しかし、これは、いくつかのマーカーと小さなポリラインを移動するときにうまく機能します。また、コードは少し粗雑であることに注意してください。私はそれがどのように行われるかを示したかっただけです。私のソリューションでは、マーカーとポリラインをオブジェクトに保存して、それらを自動的に更新します。

このgithubリポジトリで私のコードをチェックできます

于 2012-09-01T11:11:40.703 に答える