2013-11-22 166 views
1

我想将一个简单的集群策略应用于我的地图OpenLayersv2.13,但它不起作用。OpenLayers 2.13:集群策略不起作用

这是到目前为止我的代码,它正确地所有负载,但地图上没有群集上的随机点,他们只是重叠可怕......

<!DOCTYPE html> 
<html lang="en"> 
    <head> 
     <meta http-equiv="X-UA-Compatible" content="IE=edge"> 
     <meta charset="utf-8"> 
     <title>OpenLayers 2.13.x Clustered Markers</title> 
     <script src="../OpenLayers.js"></script> 
    </head> 
    <body onload="run()" style="position: absolute; top: 0; bottom: 0; left: 0; right: 0;"> 
     <div id='map' style="width: 100%; height: 100%"> 
     </div> 
     <script> 
       function run(){ 

        // create the map 
        var map = new OpenLayers.Map("map"); 

        // add a google maps layer to the map 
        var layer = new OpenLayers.Layer.WMS("OpenLayers WMS", "http://vmap0.tiles.osgeo.org/wms/vmap0", { 
         layers: "basic" 
        }); 
        map.addLayers([layer]); 

        // set up cluster strategy and vector layer 
        var strategy = new OpenLayers.Strategy.Cluster({ 
         distance: 15, 
         clustering: true 
        }); 
        var markersLayer = new OpenLayers.Layer.Vector("Clustered markers", {strategies: [strategy]}); 


        // create and add all markers randomly 
        var markers = []; 
        for (var i = 0; i < 700; i++) { 
         var r1 = Math.random(); 
         var r2 = Math.random(); 
         var r3 = Math.random(); 
         var r4 = Math.random(); 
         var px = r1 * 180 * ((r2 < 0.5) ? -1 : 1); 
         var py = r3 * 90 * ((r4 < 0.5) ? -1 : 1); 
         var p = new OpenLayers.Geometry.Point(px, py); 
         var clazz = (i % 10 === 0) ? 4 : Math.ceil(r4 * 3); 
         var f = new OpenLayers.Feature.Vector(p, {clazz: clazz}); 
         markers.push(f); 
        } 
        markersLayer.addFeatures(markers); 

        // add markers layer to the map 
        map.addLayer(markersLayer); 
        map.zoomToMaxExtent(); 
       } 
      </script> 
    </body> 
</html> 

注:当地的OpenLayers是我的机器上是版本2.13.1

我看了several examples,没有人帮我解决了这个问题。我看了几个堆栈溢出的答案,其中最好的是关于marker clustering,但也没有帮助。

我必须错过一些明显的东西,但我不能看到什么?

[UPDATE]

从下面的答案以建议,这里是代码片段(从上面)编辑的正确运行,将所述标志物的层已经被添加到地图后与不包括clustering标志...

// set up cluster strategy and vector layer 
var strategy = new OpenLayers.Strategy.Cluster({ 
    distance: 15 // <-- removed clustering flag 
}); 
var markersLayer = new OpenLayers.Layer.Vector("Clustered markers", {strategies: [strategy]}); 

// add markers layer to the map 
map.addLayer(markersLayer); // <-- adding layer before adding features 

// create and add all markers randomly 
var markers = []; 
for (var i = 0; i < 700; i++) { 
    var r1 = Math.random(); 
    var r2 = Math.random(); 
    var r3 = Math.random(); 
    var r4 = Math.random(); 
    var px = r1 * 180 * ((r2 < 0.5) ? -1 : 1); 
    var py = r3 * 90 * ((r4 < 0.5) ? -1 : 1); 
    var p = new OpenLayers.Geometry.Point(px, py); 
    var clazz = (i % 10 === 0) ? 4 : Math.ceil(r4 * 3); 
    var f = new OpenLayers.Feature.Vector(p, {clazz: clazz}); 
    markers.push(f); 
} 
markersLayer.addFeatures(markers); // <-- now can add features 

// zoom to extent 
map.zoomToMaxExtent(); 

看起来也许一个很好的做法,遵循的是确保你添加/删除功能,它之前的地图添加图层。

+0

尝试删除那些行:strategy.cluster =函数(E){的console.log(E);};任何改变? – user1702401

+0

我应该从代码中删除它们,我将编辑我的问题,但它没有任何区别。 – Jeremy

+0

另外一个疯狂的猜测:你也删除了strategy.activate();我不确定,默认情况下是否激活。 – user1702401

回答

4

我从集群战略选择

 // set up cluster strategy and vector layer 
     var strategy = new OpenLayers.Strategy.Cluster({ 
      distance: 15 
     }); 

删除“集群”,然后我会添加层到地图

 // add markers layer to the map 
     map.addLayer(markersLayer); 
     markersLayer.addFeatures(markers); 
     map.zoomToMaxExtent(); 

那么所有似乎工作后添加的标记。

+0

有趣的是,我想知道为什么订单会有所作为,以及为什么删除'clustering'标志会影响事物。 – Jeremy

1

在内部向您发送类似于Angela的邮件。

不知道为什么删除集群有任何影响,我认为它默认情况下是真的。

至于添加点的顺序,我似乎记得阅读一些关于点被点替换的事实,因此在添加点到点后添加图层可能意味着该过程不会发生。或者其他的东西。 )

干杯

伊恩