Проблема со стилями 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) и устанавливаю временный на это, все еще никакая удача. И никакая удача с установкой "избранного" стиля, также.

Что я делаю неправильно? Временный для моделирования вещей, которые в настоящее время коротко излагаются, корректны? Действительно ли там некоторый другой метод характерен для drawFeature Контроллера?

Установка Править: extendDefault, чтобы быть верной, кажется, не помогает, также...

var style_map = new OpenLayers.StyleMap({"default": layer_style, "temporary": layer_style}, {"extendDefault": "true"});
6
задан Jenny 30 April 2010 в 15:56
поделиться

1 ответ

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

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

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

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

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

12
ответ дан 8 December 2019 в 14:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: