OpenLayers3 - 是否可以组合修改/绘制/选择操作?

时间:2014-09-23 10:41:55

标签: openlayers-3

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

  1. 组合绘制/修改页面(基于相关示例,draw-and-modify-features.js
  2. 组合的选择/修改页面(基于相关示例,modify-features.js
  3. 在(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添加到绘制/修改Map实例的交互中 - 这导致了热闹的结果:-)例如,在完成多边形的绘制时(即,我双击以关闭它)它也被选中...并且点击任何地方(多边形内部或外部)只是启动另一个新的多边形边缘,它从不选择预先存在的边缘 - 等等。

    到目前为止,我唯一想到的解决方案是...让我实现一个" VI仿真" :-) ie a" command"模式(即选择/修改状态)和"插入"模式(即绘制/修改状态) - 您从"状态切换"中选择了您所处的模式。地图内的按钮(自定义OL3控件)或地图外部(普通HTML按钮)。

    然而,我正在寻找一种更好的方法,就像我建议的那样按住Ctrl ...

    欢迎任何想法/建议。

1 个答案:

答案 0 :(得分:2)

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

enter image description here

最后,结果很好 - 事后看来,采用“组合”模式实际上会带来显着的可用性缺点。