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)
同样,您可以稍后更改回调.