处理OpenLayers中的重叠功能


14

如果用户创建了一个完全与另一个重叠的多边形要素,例如……

…那么就无法选择内部特征,即一个被另一个重叠。我目前正在使用这样的简单方法SelectFeature

var select = new OpenLayers.Control.SelectFeature(
  [this.annotationLayer, this.controlPointsLayer], { 
    hover: true,
    renderIntent: "temporary"
    }
);
this.map.addControl(select);
select.activate();

但是显然,我只能选择外部特征。处理此问题的典型方法是什么?如何使用户也可以选择内部特征?

最简单的解决方案可能是使外部特征仅在减去内部特征时在剩下的区域内可供选择-但我不知道如何去做。


1
您需要创建一个z-index(订购)-请参见openlayers.org/dev/examples/ordering.html
Mapperz

ew,这意味着我必须手动检查要素的每种可能组合是否重叠,并在加载它们之前分配自定义的z顺序?就像……具有确定一个功能是否完全包含在另一个功能中的功能?
slhck

z索引排序不起作用
neogeomat

Answers:


10

很少的选择。有些疯狂:-)比其他的更疯狂。基本策略是

  • 集群功能
  • 隐藏/移动顶部功能
  • 通过顶部功能发送点击

==>

  1. 打开特征聚类策略

  2. 实现您自己的聚类算法,因此当添加或修改新项目时,您的算法将重新运行并执行嵌套的for-loop检查和n * n(-1)检查以查看哪些内容与哪些内容重叠-然后修改feature属性设置重叠功能列表,当用户单击功能时,显示重叠功能列表,并让用户选择他们真正想要单击的内容。说得通?

  3. 无需实现单击功能,只需实现整个地图单击处理程序即可。当用户单击时,检查您的图层是否有相交的要素-如果有,请显示该人员的弹出窗口,如果有多个,请显示提示列表,如上面#2所示。如果没有相交,则忽略。

  4. 实现右键单击选项以临时“隐藏”功能,以使您可以访问隐藏的功能。单击下一个,重新显示所有隐藏的功能

  5. 与#4相似,在顶部功能的弹出窗口中,添加菜单/链接项以“隐藏”功能。并像#4一样进行。

  6. 与#4/5类似,实现一个右键单击“临时移动”,然后单击将该功能拖到其他地方[记住它是旧位置]。然后,用户单击较低的功能部件,然后顶部的功能部件弹回到其原始位置。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.