ol.interaction.Draw:为绘制的每个特征写入唯一的文本

时间:2015-06-25 16:43:24

标签: javascript openlayers-3

我修改了OL 3.6.0上的“绘制特征示例”,并希望让用户在通过输入形式(文本)绘制点,多边形等时添加自己的注释。

我让jquery听取输入表单中的实际内容,并将此值返回到draw.interaction。

这部分有效。

但是当输入文本发生变化时,每个特征上的注释都会更改为这个新值 - 而不是我想要的行为。注释应保留其值。

var inputvalue = 'default description';
...
draw.on('drawend', function (evt) {
  console.log('input:' + inputvalue)
  var oldname = evt.feature.get(name);
  evt.feature.set(name, inputvalue);
  var newname = evt.feature.get(name);
  inputvalue = newname;
  vector.setStyle(personalmarker(inputvalue));
return inputvalue;
});

和风格函数中的重要部分

function personalmarker(text) {
  ... 
  var higlighttext = new ol.style.Text({
    text: text,
  });

return new ol.style.Style({
  text: higlighttext,
  fill: fill,
  stroke: stroke,
  image: image

});

DEMO:http://jsfiddle.net/wx7p40dc/2/

所以我想我需要处理一些功能ID?或者是drawend事件的问题?

1 个答案:

答案 0 :(得分:2)

将您的样式设置为要素本身。使用这种方式:

draw.on('drawend', function (evt) {
    console.log('input:' + inputvalue)
    evt.feature.setStyle(personalmarker(inputvalue));
    evt.feature.set(name, inputvalue);
});