Проблема со стилями 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}
);
у вас есть множество свойств, которые можно менять, посмотрите на эти страницы: