2013-11-22 165 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的郵件。

不知道爲什麼刪除集羣有任何影響,我認爲它默認情況下是真的。

至於添加點的順序,我似乎記得閱讀一些關於點被點替換的事實,因此在添加點到點後添加圖層可能意味着該過程不會發生。或者其他的東西。 )

乾杯

伊恩