我已经开始在我的应用中使用OpenLayers3,到目前为止,我已成功创建了以下的工作版本:
draw-and-modify-features.js
)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
添加到绘制/修改Map实例的交互中 - 这导致了热闹的结果:-)例如,在完成多边形的绘制时(即,我双击以关闭它)它也被选中...并且点击任何地方(多边形内部或外部)只是启动另一个新的多边形边缘,它从不选择预先存在的边缘 - 等等。
到目前为止,我唯一想到的解决方案是...让我实现一个" VI仿真" :-) ie a" command"模式(即选择/修改状态)和"插入"模式(即绘制/修改状态) - 您从"状态切换"中选择了您所处的模式。地图内的按钮(自定义OL3控件)或地图外部(普通HTML按钮)。
然而,我正在寻找一种更好的方法,就像我建议的那样按住Ctrl ...
欢迎任何想法/建议。
答案 0 :(得分:2)
我从来没有找到一种结合所有三种模式的解决方案。由于没有回答,我最后可能会分享一个“模态”工作形式(即点击自定义控件 - 地图内部按钮 - 进入“选择模式” )并不是那么糟糕。我最终选择了“选择模式”,“绘制/修改模式”和“测量”模式 - 可通过地图内部按钮选择:
最后,结果很好 - 事后看来,采用“组合”模式实际上会带来显着的可用性缺点。