2013-03-22 17 views
9

Bir Broşür haritasında göstermek istediğim global bir veri tabanı veritabanına (bir haritadaki noktalara) sahibim. Bir kerede tüm veritabanını (sadece çok büyük) yüklemek ve bir Broşür LayerGroup üzerinde nesneleri oluşturmak yerine, her bir harita döşemesi yüklendiğinde veriyi sorgulamak için daha verimli bir yol var mı, yoksa özel bir çözüm oluşturmayı düşünüyorum. bunun için?Büyük veri kümelerine Broşür uygulamasında görüntülenecek verimli erişim yolu

+0

nasıl haritayı hizmet ediyorsun? Sunucunun bir sınırlayıcı kutu kullanılarak sorgulanabilen bir yönteme sahip olmasını beklerdim. Veya nesnelerin miktarına bağlı olarak, belki de markerclusters kullanabilirsiniz. Örneklerinde [50000 öğe görüntüleyen bir harita] vardır (http://leaflet.github.com/Leaflet.markercluster/example/marker-clustering-realworld.50000.html). – flup

+0

Agregasyon yerine görünür olan her bir işaretçiyi görüntülemek istediğimden, markerclusters kullanmak istemiyorum. Karar vermeye çalıştığım şey haritama nasıl hizmet etmem gerektiği. Bu, hareket ettirildiği veya yakınlaştırıldığı için, sunucuyu her zaman yeni sınırlayıcı kutuya (eski olanla kısmen örtüşen) göre sorgulamak pek mantıklı olmaz. Bunu yapmanın birkaç yolunu görüntüleyebilirim, ancak tekerleği yeniden icat etmeden önce, zaten bu kadar iyi bir çözüm olmadığından emin olmak istiyorum: – CuNimb

+0

Kuyu, bir noktada, tüm dünyaya uzaklaştığınız zaman, Her bir işaretçiyi göstermek demek. Öyleyse kümelenme mantıklı. Ya da asgari yakınlaştırma seviyesinin altında hiç işaretleyici göstermeyecek misiniz? Kaç tane işaretleyiciniz var? – flup

cevap

13

Sen map.on('moveend',loadstuff) ile harita üzerinde 'moveend' etkinliği izlemek akım map.getBounds() içindeki işaretleri kapmak için loadstuff() içinde bir ajax arama yapmak ve sonra ekleme/işaretleri kaldırabilir (Ben her biri için küresel bir nevi tanımlama var varsayılabilir mevcut görünümün içinde mi yoksa dışında mı?

+0

Bu bir cevap olarak işaretlenmeli, bunu yapmanın doğru yolu. – Rudi

+0

Bunu belirtdiğiniz için teşekkür ederiz. Ben çok sofistike bir SO kullanıcısı değilim ama – CuNimb

+0

@snkashis - bunun nasıl yapılacağı konusunda biraz daha ayrıntılı bilgi verebilir misiniz? Tam olarak yapmaya çalıştığım şey ama yeteneklerim çok iyi değil! –

3

Snkashis'in söylediklerini yapmanın standart ve verimli bir yolu var. Döşenmiş bir geoJSON hizmeti oluşturun ve leaflet-tilelayer-geojson eklentisini kullanın.

Sonra tarayıcı tarafı gereken tüm kodu (Github sayfasından) 'dir:

var geojsonURL = 'http://polymaps.appspot.com/state/{z}/{x}/{y}.json'; 
var geojsonTileLayer = new L.TileLayer.GeoJSON(geojsonURL, { 
     clipTiles: true, 
     unique: function (feature) { 
      return feature.id; 
     } 
    }, { 
     style: style, 
     onEachFeature: function (feature, layer) { 
      if (feature.properties) { 
       var popupString = '<div class="popup">'; 
       for (var k in feature.properties) { 
        var v = feature.properties[k]; 
        popupString += k + ': ' + v + '<br />'; 
       } 
       popupString += '</div>'; 
       layer.bindPopup(popupString); 
      } 
      if (!(layer instanceof L.Point)) { 
       layer.on('mouseover', function() { 
        layer.setStyle(hoverStyle); 
       }); 
       layer.on('mouseout', function() { 
        layer.setStyle(style); 
       }); 
      } 
     } 
    } 
); 
map.addLayer(geojsonTileLayer); 
İlgili konular