Openlayers ol.interaction.Draw 描边样式

mcn*_*a86 0 openlayers reactjs

我有这个jsfiddle,它能够在完美运行的地图上绘制多边形。我想不通的是如何设置 .Draw 交互的样式。

目前,我有一条虚线用于用户已经绘制的多边形部分,另一条虚线将第一个绘制的点连接到最后一个绘制的点。

当我写样式时,它似乎会影响这两行。

我需要的是一条黑色虚线连接用户已经绘制的点,并且没有线(完全透明)用于将最后绘制的点连接回第一个绘制点的线。

这是我当前的样式对象:

style: new ol.style.Style({
    stroke: new ol.style.Stroke({
      color: 'rgba(0, 0, 0, 0.5)',
      lineDash: [10, 10],
      width: 3
    }),
    image: new ol.style.Circle({
      fill: new ol.style.Fill({ color: [0, 0, 0, 0.2] }),
      stroke: new ol.style.Stroke({
        color: [0, 0, 0, 0.5],
        width: 1
      }),
      radius: 4
    })
  })
Run Code Online (Sandbox Code Playgroud)

我曾尝试添加颜色和样式数组,但似乎无法正常工作。

有没有人遇到过这个问题并找到了解决方法?

mcn*_*a86 6

好的,我已经破解了这个,我不得不深入研究图书馆的来源才能弄清楚,所以我将在这里发布答案,希望它在未来可以帮助其他人,所以这里是:

我在源代码中看到的是,当您使用ol.interaction.Draw绘制多边形时,会使用多个几何图形。有底层Polygon,这是具有笔划和填充并显示连接线(基于其笔划样式)的位。有一个LineString只显示用户绘制的点的线(没有填充和没有连接线)。还有一个点,它附着在鼠标指针上。我在 jsfiddle 中留下了一个 `console.log()' 来展示这一切。

我已经创建了这个工作jsfiddle。我所做的是,而不是直接在ol.interaction.Draw我使用的内部设置样式styleFunction(见下面的代码)。我按类型检测每个几何图形并为其设置特定样式。

const styleFunction = feature => {
  var geometry = feature.getGeometry();
  console.log('geometry', geometry.getType());
  if (geometry.getType() === 'LineString') {
    var styles = [
      new ol.style.Style({
        stroke: new ol.style.Stroke({
          color: 'rgba(255, 102, 0, 1)',
          width: 3
        })
      })
    ];
    return styles;
  }
  if (geometry.getType() === 'Polygon') {
    var styles = [
      new ol.style.Style({
        stroke: new ol.style.Stroke({
          color: 'rgba(255, 102, 0, 0)',
          width: 3
        }),
        fill: new ol.style.Fill({
          color: 'rgba(255, 102, 0, 0.3)'
        })
      })
    ];
    return styles;
  }
  return false;
};
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助