2015-07-06 4 views
1

Я использую метод ol.interaction.Draw для рисования многоугольника на карте.Динамическое изменение стиля вектора в openlayers 3

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

• Я знаю, как установить стиль первоначально для функциональности Draw, но не могу понять, получения стиля для динамического изменения на лету, в то время как пользователь продолжает рисовать.

Любая помощь была бы принята с благодарностью. Благодаря!

ответ

1

style аргумент ol.layer.Vector а также ol.interaction.Draw может быть StyleFunction, который принимает функцию и текущее разрешение карты. Вы можете проверить эту функцию, если ваша геометрия действительна и возвращает соответствующий стиль.

Вот пример, где цвет изменяется от зеленого до красного, если геометрия имеет более 2-х координат:

var drawStyle = function(feature, resolution) { 
    var color = 'green'; 
    if(feature.getGeometry().getCoordinates().length > 2) { 
     color = 'red'; 
    } 
    return [new ol.style.Style({ 
     stroke: new ol.style.Stroke({ 
      color: color, 
      width: 2 
     }), 
     ... 
    })]; 
}; 

var draw = new ol.interaction.Draw({ 
    ... 
    style: drawStyle 
}); 

http://jsfiddle.net/sad71377/

+0

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

+0

Я обновил свой ответ на примере. – tsauerwein

+0

Удивительный, я смог заставить его работать. Благодаря! – dugtoni

Смежные вопросы