2011-10-12 19 views
6

Kodum GeoJSON işaretleyicileri gösteriyor, yakınlaştırılmış konumdayken yakınlaştırma düzeyinde 10, GeoJSON dosyasını yüklüyor, ancak nasıl yeniden yazılmasını önleyebilirim aynı markörler? Belirli bir yerde zaten bir işaretleyici olup olmadığını kontrol etmenin bir yolu var mı? KodOpenLayers ve GeoJSON, aynı koordinatlarda işaret çoğunu değil

map.events.register("zoomend", null, function(){ 

     if(map.zoom == 10) 
     { 
     var bounds = map.getExtent(); 
     console.log(bounds); 
     var ne = new OpenLayers.LonLat(bounds.right,bounds.top).transform(map.getProjectionObject(),wgs84); 
     var sw = new OpenLayers.LonLat(bounds.left,bounds.bottom).transform(map.getProjectionObject(),wgs84); 
     var vectorLayer = new OpenLayers.Layer.Vector(); 
     map.addLayer(vectorLayer); 
     $.getJSON('ajax.php?a=markers&type=json&sw=('+sw.lon+','+sw.lat+')&ne=('+ne.lon+','+ne.lat+')',function(data){ 
     //$.getJSON('test.json',function(data){ 
      var geojson_format = new OpenLayers.Format.GeoJSON({ 
       'externalProjection': wgs84, 
       'internalProjection': baseProjection 
       }); 
      vectorLayer.addFeatures(geojson_format.read(data)); 
     }); 
     } 
    }); 

cevap

4

Neden kullanmayın BBOXStrategy [1]?

Gereksinim duyduğunuz şey budur ve kesinlikle daha fazla performans gösterecektir (mevcut özellikleri silecek ve zoomend'da yenilerini yeniden yükleyecektir). Yeni eklenecek özelliklerin karşılaştırılması çok karşılaştırmaya ihtiyaç duyacaktır ve haritanızda çok fazla özellik bırakabilirsiniz.

Örneğin js kaynağına bakın.

HTH,

1-http://openlayers.org/dev/examples/strategy-bbox.html

DÜZENLEME: Eğer ... Eğer gerçekten bağlı dışına özellik tutmak gerekir mi sorununuzu çözecektir eklemeden önce daha az kod, vectorLayer.removeAllFeatures() bir çağrı değiştirmek isterseniz?

+0

Peki, güzel soru - ama bu ekstra güç almak woudn't? BBOX Stratejisinde –

+0

+1, ancak yakınlaştırma seviyesi kısıtlaması nasıl olur? Bu bir Stratejide kullanılabilir mi? –

+0

Zoom seviyesi kısıtlaması varsayılan olarak mevcut değildir. Bunu yapmak için bu sınıfı ('OpenLayers.Strategy.BBOX') geçersiz kılabilirsiniz. Tüm özelliklerin kaldırılması (ikinci çözümüm), eklenmeleri gerekip gerekmediğini öğrenmek için her özelliği karşılaştırmaktan daha maliyetli olmayacaktır. – tonio

0

İlk olarak map.getLayersByName gibi bir şey kullanarak haritayı katmandan çıkarmanız gerekir. Ardından eklediğiniz özelliği aramak için layer.features üzerinde yineleyebilirsiniz.

BBOX'u kullanmak için arka ucunu değiştirebilirseniz, yakınlaştırma seviyesi ve projeksiyon ayarlarına sahip BBOX stratejisi sizin için çok fazla önem taşıyor.