0

我已经开始在我的应用程序中使用 OpenLayers3,到目前为止,我已经成功地创建了以下工作版本:

  1. 组合的绘制/修改页面(基于相关示例,draw-and-modify-features.js
  2. 组合的选择/修改页面(基于相关示例,modify-features.js

在 (1) 的情况下,ol.interaction.Modify实例指定它将作用于ol.FeatureOverlay实例内部的特征:

var modify = new ol.interaction.Modify({
    features: featureOverlay.getFeatures()
...

...并且它ol.FeatureOverlay包含了用户绘制的所有新功能。

在 (2) 的情况下,ol.interaction.Modify实例指定它将作用于ol.interaction.Select实例内部的功能:

var select = new ol.interaction.Select();
var modify = new ol.interaction.Modify({
    features: select.getFeatures()
});

...除非我弄错了,否则这会创建一个ol.FeatureOverlay包含当前选定功能的隐藏项 - 然后对其进行编辑。

但是,我看不到一种结合所有 3 的方法 - 即一种允许用户绘制、选择和修改多边形的用户友好方式。

我(理想情况下)想要的是绘制/修改的功能,但是当我按下并按住 Ctrl 时,光标不再在“绘制”模式下工作,而是在“选择”模式下,允许我选择一个现有的多边形,然后点击键盘上的 Delete 将其删除,或者只用鼠标编辑其顶点。一旦我在所有多边形之外单击,我就会返回到绘制/修改模式。

我做了天真的测试——添加一个ol.interaction.Select到绘制/修改地图实例的交互中——这会导致有趣的结果:-) 例如,在完成多边形的绘制时(即当我双击关闭它时)它也被选中...并单击任何位置(多边形内部或外部)只会启动另一个新的多边形边缘,它永远不会选择预先存在的边缘 - 等等。

到目前为止,我唯一想到的解决方案是......对我来说实现“VI 仿真”:-) 即“命令”模式(即选择/修改状态)和“插入”模式(即绘图/modify state) - 您从地图内的“状态切换”按钮(自定义 OL3 控件)或地图外(普通的 HTML 按钮)中选择了您所处的模式。

但是,我正在寻找一种更好的方法,例如我建议的按住 Ctrl 的方法...

欢迎任何想法/建议。

4

1 回答 1

2

我从未找到结合所有三种模式的解决方案。由于没有答案,我不妨在最后分享一下,拥有“模态”形式的工作(即点击自定义控件 - 地图内部按钮 - 进入“选择模式”)并没有那么糟糕。我最终得到了“选择模式”、“绘制/修改模式”和“测量”模式 - 可通过地图内部按钮选择:

在此处输入图像描述

最后,结果很好——事后看来,拥有“组合”模式实际上会带来明显的可用性劣势。

于 2014-11-20T16:37:33.867 回答