OpenLayers и GeoJSON не умножают маркер на одинаковые координаты - PullRequest
6 голосов
/ 12 октября 2011

Мой код показывает маркеры из 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 ]

4 голосов
/ 21 октября 2011

Почему бы не использовать BBOX Strategy [1]?

, который будет делать то, что вам нужно, и наверняка будет более производительным (он удалит существующие функции и перезагрузит новые на zoomend).Для сравнения функций для добавления новых потребуется много сравнений, и вы можете закончить слишком большим количеством объектов на вашей карте.

Проверьте исходный код js примера.

HTH,

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

РЕДАКТИРОВАТЬ: если вы хотите изменить меньшее количество кода, вызов vectorLayer.removeAllFeatures() перед добавлением решит вашу проблему ... Вам действительно нужно сохранить функциивне границы?

0 голосов
/ 23 октября 2011

Сначала вам нужно будет удалить слой с карты, используя что-то вроде map.getLayersByName.Затем вы можете перебрать слой layer.features для поиска добавляемой вами функции.

Если вы можете изменить бэкэнд для использования BBOX, то стратегия BBOX с уровнем масштабирования и настройками проекции будет много заботить длявы.

...