【问题标题】:MapBox GeoJSON clear all markers?MapBox GeoJSON 清除所有标记?
【发布时间】:2016-08-13 21:06:13
【问题描述】:

我想用“新”标记更新我的地图。所以首先重置所有可见标记。我将通过 Ajax 的 geoJSON 读取我的标记:

   $.ajax({
        url: 'dashboard/geoJSON',
        dataType: 'json',
        async: false,
        type: 'GET',
        success: function(geojson) {
            var locations = L.mapbox.featureLayer().addTo(map);
            locations.setGeoJSON(geojson); 
            // reset?

         }
    });

我试过了:

L.mapbox.featureLayer().clearLayers();

在添加所有新标记之前重置,但它不起作用。有什么想法吗?

【问题讨论】:

    标签: javascript leaflet mapbox


    【解决方案1】:

    我找到了解决方案:

    success: function(geojson) {
    
                markers.forEach(function(entry) {
                    map.removeLayer(entry);
                });
    
                locations = L.mapbox.featureLayer().addTo(map);
                locations.on('layeradd', function (e) {
                    var marker = e.layer;
                    markers.push(marker);
                });
    
                locations.setGeoJSON(geojson);
    

    所以我会使用 'layeradd' 方法手动推送我的数组,然后在设置新数组之前将其全部删除。

    【讨论】:

      【解决方案2】:

      您应该从map 对象中清除图层,而不是featureLayers,其中layer 变量是包含所有标记的图层:

      map.removeLayer(layer);

      将全局L 对象视为某种“生成器”。您可以将其链接起来以创建地图、图层、标记等。您将通过链接地图将它们附加到特定地图。

      【讨论】:

      • 谢谢 - 但我需要一个包含所有标记的数组 - 如果不先将所有图层存储在数组中,如何重置所有图层?因为我没有用于将每个标记添加到地图的 foreach 循环,所以只需将其设置为: var locations = L.mapbox.featureLayer().addTo(map);位置.setGeoJSON(geojson);
      猜你喜欢
      • 2018-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-18
      • 1970-01-01
      相关资源
      最近更新 更多