2011-10-12 36 views
6

Mã của tôi hiển thị điểm đánh dấu từ GeoJSON, khi tôi được phóng to vào mức thu phóng 10, nó tải tệp GeoJSON, nhưng làm cách nào để tránh làm nổi bật cùng điểm đánh dấu? Có cách nào để kiểm tra xem có tồn tại một điểm đánh dấu trên một địa điểm cụ thể không? MãOpenLayers và GeoJSON, không nhân dấu trên cùng tọa độ

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)); 
     }); 
     } 
    }); 

Trả lời

4

Tại sao không sử dụng BBOXStrategy [1]?

Điều đó sẽ làm những gì bạn cần và chắc chắn sẽ có hiệu suất cao hơn (nó sẽ xóa các tính năng hiện có và tải lại các tính năng mới trên zoomend). So sánh các tính năng để thêm mới sẽ cần nhiều so sánh và bạn có thể kết thúc bằng quá nhiều tính năng trên bản đồ của mình.

Kiểm tra nguồn js của ví dụ.

HTH,

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

EDIT: nếu bạn muốn thay đổi mã ít hơn, một cuộc gọi đến vectorLayer.removeAllFeatures() trước khi thêm sẽ giải quyết vấn đề của bạn ... Bạn có thực sự cần phải giữ tính năng ra khỏi ràng buộc?

+0

Vâng, câu hỏi hay - nhưng không phải mất thêm sức mạnh? –

+0

+1 trên Chiến lược BBOX, nhưng về giới hạn mức thu phóng thì sao? Điều đó có sẵn trong Chiến lược không? –

+0

Ràng buộc mức thu phóng không có sẵn theo mặc định. Bạn có thể ghi đè lên lớp này ('OpenLayers.Strategy.BBOX') để làm điều đó. Xóa tất cả các tính năng (giải pháp thứ hai của tôi) sẽ không mất nhiều chi phí hơn so sánh mọi tính năng để biết liệu chúng có phải được thêm hay không. – tonio

0

Trước tiên, bạn cần phải loại bỏ lớp đó ra khỏi bản đồ bằng cách sử dụng một cái gì đó như map.getLayersByName. Sau đó, bạn có thể lặp qua layer.features để tìm tính năng bạn đang thêm.

Nếu bạn có thể sửa đổi chương trình phụ trợ để sử dụng BBOX, thì chiến lược BBOX với mức thu phóng và cài đặt chiếu sẽ đảm nhiệm rất nhiều cho bạn.

Các vấn đề liên quan