因此,厌倦了总是看到明亮的橙色默认正多边形,我正在尝试学习为 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});
没有不透明的正方形,但也没有临时的骰子……仍然是橙色到黑色透明。即使我制作了一个新样式(layer_style2),并将其临时设置为该样式,仍然没有运气。设置“选择”样式也没有运气。
我究竟做错了什么?临时 IS 用于样式化当前正在绘制的东西,对吗?是否有其他特定于 drawFeature 控制器的方法?
编辑:将 extendDefault 设置为 true 似乎也无济于事......
var style_map = new OpenLayers.StyleMap({"default": layer_style, "temporary": layer_style}, {"extendDefault": "true"});