OpenLayers和GeoJSON,不是相同坐标上的乘法标记

时间:2011-10-12 15:13:02

标签: javascript openlayers geojson

我的代码显示了GeoJSON中的标记,当我放大缩放级别10时,它会加载GeoJSON文件,但是如何避免重新输出相同的标记? 有没有办法检查特定地方是否已经存在标记? 代码

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

2 个答案:

答案 0 :(得分:4)

为什么不使用BBOX Strategy [1]?

这将做你需要的,并且肯定会更高效(它将删除现有功能并在zoomend上重新加载新功能)。比较要添加新功能的功能需要进行大量比较,并且您可以在地图上使用过多功能。

查看示例的js源代码。

HTH,

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

编辑:如果你想改变更少的代码,在添加之前调用vectorLayer.removeAllFeatures()将解决你的问题......你真的需要保持功能不受限制吗?

答案 1 :(得分:0)

首先,您需要使用map.getLayersByName之类的方法将图层从地图上移除。然后,您可以遍历layer.features以查找要添加的功能。

如果您可以修改后端以使用BBOX,那么具有缩放级别和投影设置的BBOX策略将为您提供很多帮助。