所以,厌倦了总是看到明亮的橙色默认正多边形,我正在努力学习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设置为true似乎没有帮助,无论是......
var style_map = new OpenLayers.StyleMap({"default": layer_style, "temporary": layer_style}, {"extendDefault": "true"});
答案 0 :(得分: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.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})
}}});
同样,您可以稍后更改回调。
答案 1 :(得分:4)
如果你想让所有的矢量都是一个恒定的风格,而不是无聊的橙色,那么试试这个:
vecLayer = new OpenLayers.Layer.Vector(
"Route Layer", //layer name
{styleMap: new OpenLayers.StyleMap({
pointRadius: "6",
fillColor: "#666666"
}),
renderers:renderer}
);
你有很多你可以搞乱的属性,看看这些页面: