同时拖放对象

时间:2012-08-31 13:50:38

标签: google-maps google-maps-api-3

我遇到了问题......我正在寻找解决方案或想法。我想同时拖放几个对象(标记,折线,......),但我不知道这是否可能......

有没有人有想法?

提前致谢! 问候, 的Sebastien


非常感谢! 你给我的好方法! 在这里你有我如何使它成为可能:

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);
            }
        }
    }); 
});

1 个答案:

答案 0 :(得分: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
});

请注意,如果您有很多物体在移动,这将非常慢。但是当移动几个标记和一条小折线时,这对我很有用。此外,请注意代码有点粗糙,我只是想表明它是如何完成的。在我的解决方案中,我将我的标记和折线存储在将自我更新的对象中。

您可以在this github repo

查看我的代码