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

Openlayers 3 OpenLayers3-是否可以组合修改/绘制/选择操作?,openlayers-3,Openlayers 3,我已经开始在我的应用程序中使用OpenLayers3,到目前为止,我已经成功创建了以下的工作版本: 组合绘制/修改页面(基于相关示例,draw and modify features.js) 组合选择/修改页面(基于相关示例,modifyfeatures.js) 在(1)的情况下,ol.interaction.Modify实例指定它将在ol.FeatureOverlay实例内的功能上工作: var modify = new ol.interaction.Modify({ features

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

  • 组合绘制/修改页面(基于相关示例,
    draw and modify features.js
  • 组合选择/修改页面(基于相关示例,
    modifyfeatures.js
  • 在(1)的情况下,
    ol.interaction.Modify
    实例指定它将在
    ol.FeatureOverlay
    实例内的功能上工作:

    var modify = new ol.interaction.Modify({
        features: featureOverlay.getFeatures()
    ...
    
    var select = new ol.interaction.Select();
    var modify = new ol.interaction.Modify({
        features: select.getFeatures()
    });
    
    …而正是
    ol.FeatureOverlay
    保存了用户绘制的所有新功能

    在(2)的情况下,
    ol.interaction.Modify
    实例指定它将在
    ol.interaction内的功能上工作。选择
    实例:

    var modify = new ol.interaction.Modify({
        features: featureOverlay.getFeatures()
    ...
    
    var select = new ol.interaction.Select();
    var modify = new ol.interaction.Modify({
        features: select.getFeatures()
    });
    
    …除非我弄错了,否则这将创建一个隐藏的
    ol.FeatureOverlay
    ,它保存当前选定的特征,然后进行编辑

    然而,我看不到一种结合所有3个多边形的方法,也就是说,一种允许用户绘制、选择和修改多边形的用户友好方法

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

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

    到目前为止,我唯一想到的解决办法是。。。对于我来说,实现一个“VI仿真”:-)即“命令”模式(即选择/修改状态)和“插入”模式(即绘制/修改状态)-并且您可以从映射(自定义OL3控件)内的“状态切换”按钮或映射(普通HTML按钮)外的“状态切换”按钮选择所处的模式

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


    任何想法/建议都是最受欢迎的。

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


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

    这有帮助吗?你必须使用修改键,但我成功地绘制、删除和修改了多边形(在阅读了源代码后,必须说:-)@JohnBarça:谢谢John,但你只是重复了我在自己的问题(modify.js)中的相同引用,而没有告诉我你是如何管理所有3个多边形的(绘制、选择、修改):-)想分享你的解决方案吗?抱歉,我在你的问题中没有看到这个链接,我也没有解决办法。这个例子有什么不适合你的地方?@JohnBarça:让我简单地说一下——当你用鼠标点击时,你要么打开selectInteraction(选择或取消选择可见特征),要么打开drawInteraction(创建新多边形)。如果我像我在原始问题中所说的那样,同时添加一个draw-and-selectInteraction,结果将完全被破坏。我非常喜欢“all-3”模式(绘制/修改/选择),但我不知道该怎么做。自从我问起,我已经实现了一个“状态切换”自定义控件(地图中的一个按钮),它可以切换绘图/选择模式——但如果所有3种模式都处于启用状态会更好。