6

因此,厌倦了总是看到明亮的橙色默认正多边形,我正在尝试学习为 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"});
4

2 回答 2

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的create回调。在创建回调中更改新创建的临时特征的样式。

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})
}}});

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

于 2010-05-01T23:56:09.067 回答
4

如果您希望所有向量具有恒定的样式,而不是无聊的橙色,请尝试以下操作:

vecLayer = new OpenLayers.Layer.Vector(
    "Route Layer",  //layer name
    {styleMap: new OpenLayers.StyleMap({
        pointRadius: "6", 
        fillColor: "#666666" 
    }),
    renderers:renderer}
);

你有很多你可以弄乱的属性,看看这些页面:

于 2012-04-23T01:25:27.810 回答