2013-07-10 48 views
1

這個問題是針對單張用戶(和那些誰使用Leaflet.draw插件)...是否可以在Leaflet.Draw中放置尺寸和數量限制?

我使用單張,並希望允許我的用戶繪製1 - 並且只有1 - 單多邊形覆蓋地圖的任何區域。我還想以某種方式限制該多邊形的大小(例如限制正方形的邊的長度或覆蓋它的區域的長度 - 最好以度爲單位指定,以便設置的大小限制可以轉換,而不考慮縮放水平)。

我的最終目標是簡單地提取4個正方形頂點的座標或多邊形區域覆蓋的座標。

那就是說,我找到了Leaflet.Draw插件。但是,我想要將其功能限制在我的要求範圍內(每次只繪製一個多邊形,特別是尺寸不能太大)。這可能嗎?如果是這樣,怎麼樣?

無論是否或不可能,是否有更好的方法去做這件事?

+0

你能更清楚地描述你的最終目標嗎? –

+0

@LSA - 當然,基本上,需要修改Leaflet.draw以將地圖上繪製的多邊形數量限制爲1.並且還需要限制該多邊形的大小。如果沒有使用leaflet.draw,還有其他方法可以這樣做,我也願意使用該方法。 – whistler

+0

你有解決嗎?你有做過什麼嗎?如果是,你可以發佈你的解決方案 – user902383

回答

0

這就是說,我找到了Leaflet.Draw插件。但是,我想要將其功能限制在我的要求範圍內(每次只繪製一個多邊形,特別是尺寸不能太大)。這可能嗎?如果是這樣,怎麼樣?

我想你需要自己編寫代碼。

我看到兩個possibities:

  1. 黑客抽獎插件(寫入插件裏面你自己的代碼),從抽籤插件擴展L.Draw.Polygon類
  2. (見docs約OOP小冊子)創建一個裙子

1更快,2更乾淨。你必須根據你的項目大小來選擇。

0

我做了它沒有黑客傳單繪製來源。

將控件添加到地圖後,我在控件中放置了一個隱藏的div。然後當創建一個多邊形時,我顯示該div。我使用CSS將它絕對放置在控件上,這樣就可以「禁用」按鈕和CSS來使按鈕顯得褪色。如果多邊形被刪除,然後我隱藏該div。

不是最好的解決方案,但我工作時無需編輯源代碼。

添加drawControl後,我添加了隱藏的div:

$('.leaflet-draw-section:first').append('<div class="leaflet-draw-inner-toolbar" title="Polygon already added"></div>'); 

這裏的JS切換他們:

map.on('draw:created', function (e) { 
    var type = e.layerType, 
     layer = e.layer; 

    // keep the polygon on the map 
    drawnItems.addLayer(layer); 

    // disable the create polygon tools 
    $('.leaflet-draw-inner-toolbar').show(); 
}); 

map.on('draw:deleted', function(e) { 
    // enable the create polygon tools 
    $('.leaflet-draw-inner-toolbar').hide(); 
}); 

這裏的CSS:

.leaflet-draw-inner-toolbar { 
    background: none repeat scroll 0 0 rgba(255, 255, 255, 0.6); 
    bottom: 0; 
    display: none; 
    left: 0; 
    position: absolute; 
    right: 0; 
    top: 0; 
} 
5

我可以提議這個問題的另一個解決方案

我會通過執行以下操作多邊形的數量限制爲一個:

map.on('draw:created', function (e) { 
    var layer = e.layer; 
    if(drawnItems && drawnItems.getLayers().length!==0){ 
     drawnItems.clearLayers(); 
    }   
    drawnItems.addLayer(layer);  
}); 

我聽抽獎:創建活動,並確定是否已經有一個標記。如果有的話,我刪除那個標記並將我的新標記放在所需的位置。因此,用戶不再需要刪除前一個和一個標記規則就可以減少一次點擊次數。

如果您想允許多個標記,您可以先刪除最舊的圖層。

如果您不想自動刪除圖層,則可以提示用戶或忽略該請求。

相關問題