2012-08-31 33 views
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); 
      } 
     } 
    }); 
}); 

回答

1

的問題是,它只是你可以將N」下降標​​記,所以你必須考慮到這一點設計的功能。

首先我們需要現在的起始位置,這是通過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