2014-09-23 67 views
0

我在我的应用程序中使用OpenLayers3开始,并在创建工作版本,到目前为止,我已经成功了: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添加到绘图/修改Map实例的交互中 - 这导致了令人捧腹的结果:-)例如,在完成绘制多边形时(即,点击关闭它)它也被选中......并且点击任何地方(多边形内部或外部)只是开始另一个新的多边形边缘,它从不选择预先存在的一个边缘等。

我只想到一个解决方案远远是......为了实现“VI仿真”:-)即“命令”模式(即选择/修改状态)和“插入”模式(即绘制/修改状态) - 和你从地图(自定义OL3控件)或地图(常规HTML按钮)内部的“状态切换”按钮中选择您所处的模式。

我,但是,找一个更好的办法,像我跟按住Ctrl建议...

任何意见/建议,深受欢迎。

+0

这有帮助吗? http://openlayers.org/en/v3.0.0/examples/draw-and-modify-features.html?q=modify你必须使用修饰键,但我设法绘制,删除和修改多边形(阅读后来源,它必须说:-)) – 2014-09-26 10:34:09

+0

@JohnBarça:谢谢约翰,但你只是重复我在我自己的问题(modify.js)中有同样的参考,没有告诉我你是如何管理所有3(绘制,选择,修改):-)小心分享你的解决方案? – ttsiodras 2014-09-29 07:05:09

+0

对不起,我没有看到你的问题中的链接,我没有解决方案。那个不适合你的例子是什么? – 2014-09-29 07:08:34

回答

2

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

enter image description here

最终,它变成了罚款 - 事后看来,采用“组合”模式实际上会带来显着的可用性缺点。