首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何表示OpenLayers 4集群之外的特性?

如何表示OpenLayers 4集群之外的特性?
EN

Stack Overflow用户
提问于 2019-06-24 10:44:51
回答 1查看 402关注 0票数 0

我正在使用OpenLayers角度依赖性,实际上,我使用的是v4.1.1,目前我无法将它更新到最新版本。

我有一张带有ol.source.Cluster的地图。它对我的所有ol.layer.Vector层进行了聚类,这些层由图钉特性组成,类似于这个例子

用户可以选择我的应用程序中的特性。此操作突出显示单个指定的功能,并将映射放大到该功能,以便让用户知道所选的是哪一个。当特性被聚类时,我的问题就出现了;我希望这个特性可以呈现在集群之外,并且当它被取消选择时可以再次添加到集群中。这很容易吗?,我已经阅读了涉及到的类,ol.source.Clusterol.source.Vector的文档(我知道它们是v4.6.5,但我没有找到v4.1.1),也许我跳过了什么东西,或者您知道如何做到这一点。

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

  • 修改群集的distance属性,将其设置为0。通过这种方式,将禁用集群化,并单独显示所有功能。这不是最好的方法,因为用户可以放大地图,而且地图上可能有太多的图钉。即使我处理缩放级别,并且在缩放太低时启用集群功能,所选的图钉也会被集群化,这不是所希望的行为。
  • 使用辅助图层并表示所选的图钉。这一层将包含在其源上只包含一个功能,选定的一个,它将被删除,一旦它被取消选择。我不得不承认,我还没有实现这个示例,因为它有点复杂(我还必须处理这个层在集群层中的可见性等等),而且我没有太多的时间来做POC。 更新:我刚达到了在集群源代码选项中设置一个geometryFunction的目的,该选项可以过滤图钉,只需要对未被选中的图钉进行集群。问题是所选的特性没有呈现,因此我需要辅助性层来将要表示的所选特性传递给它:
代码语言:javascript
复制
    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;
       }
    });

因此,总而言之,是否有一种方法可以从集群中删除一个特性,并与集群一起单独表示它?

EN

回答 1

Stack Overflow用户

发布于 2019-07-03 06:44:55

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

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

为了达到这个目的,我创建了一个js类,该类继承自ol.layer.Vector,以扩展其功能,以添加我所需的内容。

当我在遗留代码中这样做时,这比我在这里解释的目标要复杂得多,粘贴代码片段作为示例有点复杂,因为我应该删除许多无用的行,也许它根本就不正确。所以如果你有什么具体的问题,我可以解释得更好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56734920

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档