Так, усталый от всегда наблюдения ярко-оранжевых правильных многоугольников по умолчанию, я пытаюсь учиться разрабатывать 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"});
Я нашел два решения для этой проблемы. В обоих решениях необходимо изменить некоторые параметры 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})
}}});
Аналогично, вы можете изменить обратный вызов позже.