我正在使用OpenLayers角度依赖性,实际上,我使用的是v4.1.1,目前我无法将它更新到最新版本。
我有一张带有ol.source.Cluster的地图。它对我的所有ol.layer.Vector层进行了聚类,这些层由图钉特性组成,类似于这个例子。
用户可以选择我的应用程序中的特性。此操作突出显示单个指定的功能,并将映射放大到该功能,以便让用户知道所选的是哪一个。当特性被聚类时,我的问题就出现了;我希望这个特性可以呈现在集群之外,并且当它被取消选择时可以再次添加到集群中。这很容易吗?,我已经阅读了涉及到的类,ol.source.Cluster和ol.source.Vector的文档(我知道它们是v4.6.5,但我没有找到v4.1.1),也许我跳过了什么东西,或者您知道如何做到这一点。
我尝试过两种解决方案,但我不太喜欢:
distance属性,将其设置为0。通过这种方式,将禁用集群化,并单独显示所有功能。这不是最好的方法,因为用户可以放大地图,而且地图上可能有太多的图钉。即使我处理缩放级别,并且在缩放太低时启用集群功能,所选的图钉也会被集群化,这不是所希望的行为。geometryFunction的目的,该选项可以过滤图钉,只需要对未被选中的图钉进行集群。问题是所选的特性没有呈现,因此我需要辅助性层来将要表示的所选特性传递给它: let clusterSource = new ol.source.Cluster({
distance: 40,
source: vectorSource,
geometryFunction: (feature) => {
if (feature.get('selected')) {
return null;
}
return feature.getGeometry() as ol.geom.Point;
}
});因此,总而言之,是否有一种方法可以从集群中删除一个特性,并与集群一起单独表示它?
发布于 2019-07-03 06:44:55
最后,由于我没有在OpenLayers 4 API中找到任何东西来轻松实现我的目标,所以我实现了辅助层的方法。与其余部分一样,我将所有图钉集中在同一个源下(这些图钉表示不同类型的实体,因此每个类型都可以单独显示/隐藏)。但是,当我选择一个实体时,我停止通过集群源的geometryFunction对其进行聚类,并在辅助层中克隆它,在地图中将它显示为一个选定的特性(具有特定的样式)。
由于一组图钉可以在用户修改其可见性时被排除在集群之外,因此通过特定于每种类型实体的子层,我为每个子层创建了一个辅助层,因此当修改它们的可见性时,我将修改其辅助层的可见性,以便隐藏/显示单个特性。
为了达到这个目的,我创建了一个js类,该类继承自ol.layer.Vector,以扩展其功能,以添加我所需的内容。
当我在遗留代码中这样做时,这比我在这里解释的目标要复杂得多,粘贴代码片段作为示例有点复杂,因为我应该删除许多无用的行,也许它根本就不正确。所以如果你有什么具体的问题,我可以解释得更好。
https://stackoverflow.com/questions/56734920
复制相似问题