2013-08-27 54 views
2

我已經構建了一個Google Maps API工具集,允許用戶在地圖上繪製形狀,給他們名稱和記錄區域。在完成每個形狀時,系統會提示他們命名並設置其他幾個選項,例如是否在地圖上顯示標籤。在繪製Google地圖API多段線時可以取消嗎?

我想給予用戶右鍵點擊並取消折線(或多邊形)同時放置點的選項,即當他們正在繪製它時。

根據我在文檔中讀到的內容,我應該能夠檢測到用戶右鍵單擊了地圖,但我不確定如何取消它們繪製的疊加層,因爲它不會一直致力於地圖,這意味着我將無法將其作爲一個對象。

任何想法?

解決方案

感謝莫爾博士的解決方案,這是如下:

... 
    google.maps.event.addListener(_map, "rightclick", function(){ 
     InitialiseDrawingManager(); 
    }); 
} 

function InitialiseDrawingManager(){ 
    if (_drawingManager != null) 
     _drawingManager.setMap(null); 

    _drawingManager = new google.maps.drawing.DrawingManager(); 
    _drawingManager.setMap(_map); 

    UpdateOverlaySettings(); 
    ... 
+0

你的代碼是什麼樣的? – geocodezip

回答

3

(假設你使用google.maps.drawing.DrawingManager

當前覆蓋不能訪問任何方式。你可以做什麼:

rightclick設置DrawingManager -instance的map - 屬性設置爲null,創建一個新的DrawingManager -instance。

這將刪除當前編輯的重疊(但不包括已完成覆蓋)

3

雖然接受的答案作品的代碼,它拋出一個錯誤,可能是由於沒有正確刪除事件偵聽器。

下面是一個更好的辦法:

我用一個變量cancelDrawingShape如果在東西正在制定退出按鈕被按下。如果cancelDrawingShape設置爲true,那麼我將從地圖中刪除最後繪製的形狀。

var cancelDrawingShape = false; 

google.maps.event.addListener(drawingManager, 'overlaycomplete', function (e) { 
    var lastDrawnShape = e.overlay; 
    if (cancelDrawingShape) { 
     cancelDrawingShape = false; 
     lastDrawnShape.setMap(null); // Remove drawn but unwanted shape 
     return; 
    } 

    // Else, do other stuff with lastDrawnShape 
}); 

$(document).keydown(function (event) { 
    if (event.keyCode === 27) { // Escape key pressed 
     cancelDrawingShape = true; 
     drawingManager.setDrawingMode(null); // To terminate the drawing, will result in autoclosing of the shape being drawn. 
    } 
}); 
相關問題