如何在OpenLayers 4群集之外表示功能?

时间:2019-06-24 10:44:51

标签: angular openlayers

我正在与OpenLayers angular dependency合作,实际上,我正在使用v4.1.1,目前,我无法将其更新为最新版本。

我有一张带有ol.source.Cluster的地图。它将我所有的ol.layer.Vector图层聚类,这些图层由图钉功能组成,类似于this example

用户可以选择我的应用程序中的功能。此操作将突出显示单个指定的要素,并将地图放大到该要素,以使用户知道选择了哪个。功能集群化时出现了我的问题。 我希望该功能可以在群集外部呈现,并且可以在未选择该功能时将其再次添加到群集中。这很容易吗?我已经阅读了相关类ol.source.Clusterol.source.Vector的文档(我知道它们是v4.6.5,但是我没有找到{{1 }}),也许我正在跳过某些内容,或者您​​知道一种执行此操作的方法。

我尝试了两种解决方案,但是我不太喜欢:

  • 修改集群的v4.1.1属性,将其设置为0。这样,将禁用集群功能,并分别显示所有功能。这不是最佳方法,因为用户可以缩小地图,并且地图上可能有太多图钉。即使我处理了缩放级别,并且在缩放太低时启用了群集功能,所选图钉也会被群集,这不是期望的行为。
  • 要使用辅助图层并在其中表示所选图钉。该层将仅在其源上包含一个要素(即所选要素),并且一旦取消选中该要素,就会将其删除。我不得不承认,我还没有实现这个示例,因为它有点复杂(我还必须处理该层以及整个群集层的可见性,依此类推),而且我没有太多时间来进行POC 。

    更新:我刚刚在集群源选项中设置了一个distance,该选项可过滤图钉并仅对未选择的图钉进行集群。问题在于所选的要素未渲染,因此我需要辅助图层以便将所选要素呈现给它:

geometryFunction

总而言之,是否可以从集群中删除功能并将其与集群一起单独表示?

1 个答案:

答案 0 :(得分:0)

最后,由于在OpenLayers 4 API中找不到任何东西可以轻松实现目标,因此我实现了辅助层的方法。与其余的一样,我将所有图钉聚类在同一来源下(这些图钉代表不同类型的实体,因此每种类型都可以单独显示/隐藏)。但是,当我选择单个实体时,我将停止通过集群源的localStorage对其进行集群,并将其克隆到辅助层中,在地图中将其显示为单个选定要素(具有特定样式)。

由于当用户修改其可见性时,可以将一组图钉排除在集群之外,因此通过针对每种类型的实体的特定子层,我为这些子层中的每个子层创建了一个辅助层,因此在修改其可见性时我修改了其辅助层的可见性,以隐藏/显示单个要素。

为此,我创建了一个geometryFunction类,该类继承自js,以扩展其功能并添加所需的内容。

正如我在遗留代码中所做的那样,这比我在此解释的目标要复杂得多,因此粘贴代码片段作为示例有点复杂,因为我必须删除很多无用的行,也许它会一点都不正确。因此,如果您有任何特定的问题,我可以更好地解释。