2010-04-30 114 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