2011-04-20 124 views
0

我對OpenLayers.Feature.Vector標籤有一個很大的問題。當我使用Canvas渲染器時,所有標籤都在featureGraphic功能下。你可以在這裏看到什麼:OpenLayers標籤問題

http://jsfiddle.net/67aaJ/

不知道如何強制標籤上刷漆標記。使用let說SVG渲染器可以很容易地在標記上添加標籤,但在這種情況下,如果有多個標記,標籤會顯得雜亂無章。它看起來像第一個渲染器繪製所有圖形而不是所有標籤。例如:

http://jsfiddle.net/6kXYh/1/

我要尋找一個解決方案(渲染無所謂)超過它,但沒有顯示與標籤的標記「標籤colisions」,讓說,我們有一個位置,但不同的標籤5個標記我期待看到最後添加的功能externalGraphic及其標籤,以前的功能(和標籤)應該在最後一個。

請幫忙!謝謝。

回答

0

OpenLayers沒有任何我知道的標籤碰撞檢測。我想你必須自己做,或者依靠後端的一些映射軟件。

+0

我已經找到了一個解決方案,不是很聰明,但它工作。當我添加新功能時,我可以檢查distansTo是否已添加功能並刪除「舊」labes。縮放級別+圖標大小+距離給我所有信息來檢測特徵之間的碰撞。從性能角度來看,解決方案並不是很好,因爲需要迭代特徵數組來查找衝突。在我的情況下,這是確定的,因爲我不玩大量的圖標。感謝您的幫助:) – Lukasz 2011-04-21 19:28:42

0

爲回答一個非常古老的問題而道歉,但對於其他人提出這個問題,另一種解決方案可能是使用羣集策略併爲羣集添加標籤。對於具有多於1個功能的羣集,可以用逗號分隔或\ n分開。例如代碼在這裏:

var style = new OpenLayers.Style({ 
    label: "${type}", 
    fillColor: "#ffcc66", 
    fillOpacity: 0.8, 
    strokeColor: "#cc6633", 
    strokeWidth: 2, 
    strokeOpacity: 0.8 
}, { 
    context: { 
    type: function(feature) { 
     // concatenate labels and return 
     return "the label"; 
    } 
    } 
}); 

adaped來自: http://openlayers.org/dev/examples/strategy-cluster.html

+0

每個人似乎都提供集羣作爲解決方案。雖然集羣在某些情況下當然可以起作用,但其中有許多不起作用。假設我在同一地點有4臺設備。如果它們聚集(或不聚合),我如何讓它們分開,以便我可以點擊其中一個設備來啓用它的彈出窗口?我如何顯示每個標籤,以便知道哪些設備包含該羣集? – CramerTV 2013-12-10 23:46:19