Проблема со стилями 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});

нет, непрозрачные квадратная, но и не временная... Все еще оранжевый, переходящий в черный прозрачный. Даже если я сделаю новый стиль (layer_style2) и установлю временный, все равно не повезет. И не повезло с настройкой стиля "select".

что я делаю не так? Временное для укладки вещей, которые в настоящее время набрасываются, правильно? Есть другой способ, характерные для контроллера drawFeature?

Edit: установка extendDefault как true также не помогает...

var style_map = new OpenLayers.StyleMap({"default": layer_style, "temporary": layer_style}, {"extendDefault": "true"});

2 ответов


Я нашел два решения этой проблемы. В обоих решениях вам нужно изменить некоторые параметры DrawFeature, чтобы получить желаемую функциональность.

1.Измените стиль обработчика DrawFeature. Функция drawFeature в OpenLayers.Обработчик.Polygon использует стиль параметра обработчика для объекта. Поэтому вы должны изменить этот стиль.

при создании функции использовать:

var drawPolygon = new OpenLayers.Control.DrawFeature(polygonLayer, OpenLayers.Handler.Polygon, {handlerOptions:{style:myStyle}});

позже, вы можете изменить его на:

drawPolygon.handler.style = myStyle;

2.Изменить создать обратный вызов DrawFeature. Измените стиль вновь созданной временной функции в create callback.

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

аналогично, вы можете изменить обратный вызов позже.


Если вы хотите, чтобы все векторы имели постоянный стиль, но не скучный оранжевый, попробуйте следующее:

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

у вас есть множество свойств, которые можно менять, посмотрите на эти страницы: