OpenLayers样式的麻烦

Jen*_*nny 6 coding-style 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;
Run Code Online (Sandbox Code Playgroud)

但正好我正在用DrawFeature绘制我的多边形,我的风格只有在我完成绘图后才会生效,并且看到它从亮橙色到灰色的快照有点令人不安.所以,我了解了临时样式,并试过:

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

这让我变成了一个橙色的正方形 - 直到我停止绘制,当它折断成完全不透明的黑色时.我想也许我必须明确设置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;
Run Code Online (Sandbox Code Playgroud)

这也让我成了黑色不透明的广场.(即使图层样式在没有给出地图时也能正常工作).将地图传递给图层本身就像这样:

polygonLayer = new OpenLayers.Layer.Vector("PolygonLayer", style_map);
Run Code Online (Sandbox Code Playgroud)

没有得到任何东西.橙色一路,即使画完后也是如此.

polygonLayer = new OpenLayers.Layer.Vector("PolygonLayer", {styleMap: style_map});
Run Code Online (Sandbox Code Playgroud)

更成功:绘制时呈橙色,绘制时带有黑色轮廓的半透明黑色.就像我没有使用地图一样.问题是,仍然没有暂时的......

所以,我尝试用这种方式初始化我的地图:

var style_map = new OpenLayers.StyleMap({"default": layer_style, "temporary": layer_style});
Run Code Online (Sandbox Code Playgroud)

没有不透明的方形,但没有临时的骰子,或者......仍然橙色贴紧黑色透明.即使我创建一个新的Style(layer_style2),并设置临时,仍然没有运气.并且设置"选择"风格也没有运气.

我究竟做错了什么?临时IS用于样式化当前正在勾画的东西,对吗?是否有一些特定于drawFeature控制器的其他方法?

编辑:将extendDefault设置为true似乎没有帮助,要么......

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

Tom*_*mik 12

我找到了两个解决这个问题的方法.在这两种解决方案中,您都必须更改DrawFeature的某些参数以获得所需的功能.

1.更改DrawFeature的处理程序样式.OpenLayers.Handler.Polygon中的函数drawFeature使用该功能的处理程序的参数样式.所以你必须改变这种风格.

创建功能时使用:

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

稍后,您可以通过以下方式更改它:

drawPolygon.handler.style = myStyle;
Run Code Online (Sandbox Code Playgroud)

2.Change创建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})
}}});
Run Code Online (Sandbox Code Playgroud)

同样,您可以稍后更改回调.

  • 先生,你是个天才.这让我抓狂!当我在使用drawFeature的处理程序选项时,我没有看到任何可以传递的"样式",所以我认为这不是一个选项...我所知道的只是"sides:"选项,即便如此,我也找不到他们提到的API在哪里的参考.谢谢! (3认同)