OpenLayers样式的麻烦

时间:2010-04-30 14:38:16

标签: 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;

但正好我正在用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"});

2 个答案:

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

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