openlayers集群策略 - 展示1个功能集群的自定义图标

时间:2013-03-08 18:07:03

标签: openlayers

我有一个页面显示从 kml文件导入的矢量图层(基本上类似于sundials example)。它运行得非常好,既可以使用固定策略,也可以同时使用固定策略和CLUSTER策略。

我想创建一个混合显示,而“1个功能的群集”会显示原始的自定义图标例如,<Style><IconStyle><Icon><href>img/arrowRed.png下的KML文件。

现在,如果我使用群集策略,则使用默认图标(黄色磁盘)显示1(特征)群集。

我宁愿不使用任何非标准openlayers的插件或库。 有什么建议吗?

使用群集的原始javascript代码的一部分下方(删除群集策略声明new OpenLayers.Strategy.Cluster()并自定义图标显示正常):

var urlKMLClient = 'KMLClientsAll.kml'; 
var layerKMLClient = new OpenLayers.Layer.Vector("Clients", {
        strategies: [new OpenLayers.Strategy.Fixed(), new OpenLayers.Strategy.Cluster(), refresh],
        protocol: new OpenLayers.Protocol.HTTP({
            url: urlKMLClient,
            format: new OpenLayers.Format.KML({
                extractStyles: true, 
                extractAttributes: true,
                maxDepth: 2
            })
        })
    }); 

WITHOUT CLUSTER

请参阅客户端自定义图标(绿色标记)让位于

下方的群集默认图标(黄色磁盘)

WITH CLUSTER

2 个答案:

答案 0 :(得分:3)

使用:new OpenLayers.Strategy.Cluster({threshold:2})这允许他们不在群集中的孤立点。

(是GIS论坛中同一问题的答案重复)

答案 1 :(得分:0)

this GIS question中找到了解决方案:

将群集策略更改为超过1.上述代码将变为:

var clusterStrategy = new OpenLayers.Strategy.Cluster({ distance: 35, threshold: 2 });
var urlKMLClient = 'KMLClientsAll.kml'; 
var layerKMLClient = new OpenLayers.Layer.Vector("Clients", {
        strategies: [new OpenLayers.Strategy.Fixed(), clusterStrategy, refresh],
        protocol: new OpenLayers.Protocol.HTTP({
            url: urlKMLClient,
            format: new OpenLayers.Format.KML({
                extractStyles: true, 
                extractAttributes: true,
                maxDepth: 2
            })
        })
    });