2010-04-30 116 views
6

因此,我總是看到明亮的橙色默認正規多邊形,我試圖學習如何設計OpenLayers。OpenLayers樣式問題

我已經取得了一些成功:

 var layer_style = OpenLayers.Util.extend({},OpenLayers.Feature.Vector.style['default']); 
    layer_style.fillColor = "#000000"; 
layer_style.strokeColor = "#000000"; 
polygonLayer = new OpenLayers.Layer.Vector("PolygonLayer"); 
polygonLayer.style = layer_style; 

但正弦我畫我的DrawFeature多邊形,我的風格只能生效一次,我已經完成了繪圖,並看到它明亮的橙色捕捉到灰有點令人不安。所以,我學到了臨時的風格,並嘗試:

var layer_style = new OpenLayers.Style({"default": {fillColor: "#000000"}, "temporary": {fillColor: "#000000"}}) 
polygonLayer = new OpenLayers.Layer.Vector("PolygonLayer"); 
polygonLayer.style = layer_style; 

這讓我一個橙色的正方形 - 直到我停下來繪製,當它咬合到完全不透明的黑色。我想,也許我必須明確地設置fillOpacity ...沒有骰子。即使當我將兩種填充顏色分別改爲粉色和藍色時,我仍然只看到橙色和不透明的黑色。

我試過搞亂StyleMaps,因爲我讀過如果你只添加一種樣式到樣式映射中,它使用默認的樣式,包括臨時樣式。

var layer_style = OpenLayers.Util.extend({}, OpenLayers.Feature.Vector.style['default']); 
var style_map = new OpenLayers.StyleMap(layer_style); 
polygonLayer = new OpenLayers.Layer.Vector("PolygonLayer"); 
polygonLayer.style = style_map; 

這讓我也是黑色不透明的廣場。 (即使沒有提供給地圖的圖層樣式也適用)。像這樣將地圖傳遞到圖層本身:

polygonLayer = new OpenLayers.Layer.Vector("PolygonLayer", style_map); 

沒有得到任何東西。即使在繪製之後,仍然是橙色的。

polygonLayer = new OpenLayers.Layer.Vector("PolygonLayer", {styleMap: style_map}); 

更多的成功:繪製時橙色,繪製時呈黑色輪廓的半透明黑色。就像我沒有使用地圖一樣。問題是,仍然沒有臨時...

所以,我想我的初始化地圖是這樣的:

var style_map = new OpenLayers.StyleMap({"default": layer_style, "temporary": layer_style}); 

沒有不透明的方形,但暫時沒有骰子,要麼...橙色的捕捉到黑透明。即使我製作了一個新的Style(layer_style2),並將其設置爲臨時,仍然沒有運氣。並沒有設置「選擇」風格的運氣,無論是。

我在做什麼錯?爲當前正在繪製的東西造型的臨時IS是正確的?是否有其他特定於drawFeature控制器的方式?

編輯:設置extendDefault是真實的似乎並沒有幫助,要麼...

var style_map = new OpenLayers.StyleMap({"default": layer_style, "temporary": layer_style}, {"extendDefault": "true"}); 

回答

12

我發現這個問題的兩個解決方案。在這兩種解決方案中,您都必須更改DrawFeature的某些參數才能獲得所需的功能。

1.修改DrawFeature的處理程序風格。 OpenLayers.Handler.Polygon中的函數drawFeature使用該特徵的處理函數的參數樣式。所以你必須改變這種風格。

當創建特徵使用:

var drawPolygon = new OpenLayers.Control.DrawFeature(polygonLayer, OpenLayers.Handler.Polygon, {handlerOptions:{style:myStyle}}); 

以後,你可以通過改變它:

drawPolygon.handler.style = myStyle; 

2。更改DrawFeature的創建回調。在創建回調中更改新創建的臨時功能的樣式。

var drawPolygon = new OpenLayers.Control.DrawFeature(polygonLayer, OpenLayers.Handler.Polygon, { 
     callbacks:{create: function(vertex, feature) { 
      feature.style = myStyle; 
      this.layer.events.triggerEvent("sketchstarted", {vertex:vertex,feature:feature}) 
}}}); 

同樣,您可以稍後更改回調。

+3

你,先生,是個天才。這讓我瘋狂!當我在drawFeature的處理程序選項中查找時,我沒有看到任何可以通過的「樣式」,所以我認爲這不是一種選擇......我所知道的只是「雙方:」選項,即使如此,我也找不到他們提到的API在哪裏。謝謝! – Jenny 2010-05-03 11:51:46

+0

使用第一種解決方案,一旦通過雙擊確認了最終的多邊形,樣式就會重置爲默認的樣式,所以最後我仍然需要使用回調來重置樣式。 – 2012-11-02 11:52:25