Openlayers React 旋转多边形功能

Openlayers React rotate polygon feature

我这里有一个简单的 react/openlayers(https://jsfiddle.net/mcneela86/Lx44yc3m/),我已经设置它来演示我的问题。

  1. 我有一个简单的地图,目前可以使用。
  2. 一个允许用户绘制当前可用的多边形的工具。
  3. 允许用户移动当前工作的多边形的工具。
  4. 一个允许用户旋转多边形的工具,目前无法使用 - 这是我需要帮助的地方,并且包含了其他工具,以防他们帮助任何人了解我的应用程序是如何工作的。

在我的示例应用程序中,如果您绘制一个多边形,select 旋转工具并单击您绘制的多边形,它会将多边形旋转 20 度 - 所以我知道有一个旋转功能。我希望用户单击并拖动或单击并显示要拖动的手柄,以便他们可以很好地控制旋转。

feature.element.getGeometry().rotate(0.349066, c); 目前正在进行轮换。

所以我不知道如何接受用户输入,比方说 mousedown,检测到他们正在移动鼠标并使用 rotate() 函数中的值来更改多边形的旋转?

如有任何帮助,我们将不胜感激。

编辑:

这里是关于多边形边界 box/handles 的意思的示例:

悬停时显示句柄,用指针事件检测:

  map.on('pointermove', (evt) => {
    if (evt.dragging) {
      return;
    }
    const pixel = this.map.getEventPixel(evt.originalEvent);

    const feature = this.map.forEachFeatureAtPixel(
      pixel,
      someFeature => someFeature, // return first element
      { hitTolerance: 2 }
    );

    // control an css class somehwere or use style.
    map.getTarget().style.cursor = feature ? 'pointer' : '';
  });

对于 real-live 旋转:

  1. 用户按住鼠标,触发mousedown
  2. 存储光标的 startPosition 并切换 "isRotating" 标志
  3. pointermove事件中(见上),(if isRotating)使用position计算相对于startPosition的变化来更新旋转
  4. (可能是可选的)当触发 mouseup 时,应用最终旋转并将 isRotating 标志切换回来

ol-ext 项目提供了一组很酷的扩展,包括与 move/rotate 对象的交互。 看看这个例子:http://viglino.github.io/ol-ext/examples/interaction/map.interaction.transform.html @+