我已经开始在我的应用程序中使用 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
到绘制/修改地图实例的交互中——这会导致有趣的结果:-) 例如,在完成多边形的绘制时(即当我双击关闭它时)它也被选中...并单击任何位置(多边形内部或外部)只会启动另一个新的多边形边缘,它永远不会选择预先存在的边缘 - 等等。
到目前为止,我唯一想到的解决方案是......对我来说实现“VI 仿真”:-) 即“命令”模式(即选择/修改状态)和“插入”模式(即绘图/modify state) - 您从地图内的“状态切换”按钮(自定义 OL3 控件)或地图外(普通的 HTML 按钮)中选择了您所处的模式。
但是,我正在寻找一种更好的方法,例如我建议的按住 Ctrl 的方法...
欢迎任何想法/建议。