【问题标题】:Leaflet: delete layer after 'moveend' command, then that this same layer re-added传单:在“moveend”命令后删除图层,然后重新添加同一图层
【发布时间】:2016-12-01 07:24:26
【问题描述】:

“moveend”命令后如何删除图层,然后重新添加同一图层?

详情:

我想使用 getJSON 在来自 MySQL 的传单中添加超过 60,000 个点。考虑到大量的点,我只想在 BBOX 中显示点。首先在 MySQL 中发送 BBOX 坐标:

map.on('moveend', function() { 
    $.ajax({
        type: "POST",
        url: "storeCoordinateBBOX.php",
        data: { sjever: map.getBounds()._northEast.lat, jug: map.getBounds()._southWest.lat, zapad: map.getBounds()._southWest.lng, istok: map.getBounds()._northEast.lng}
    }).done(function( msg ) {
    //alert( msg );
    });
});

然后只选择位于 BBOX 内的点。

PHP (get_address.php)

$sql = "SELECT objectid, ulica, kb, ( Y(SHAPE)) AS lat, ( X(SHAPE)) AS lng FROM bl_tacke_adrese WHERE ( Y(SHAPE) ) > $jug AND ( Y(SHAPE) ) < $sjever AND ( X(SHAPE) ) > $zapad AND ( X(SHAPE) ) < $istok;";

然后,选择的数据添加到传单:

address = new L.LayerGroup();
[...]

function getUsers_ostalo() {
  map.on('moveend', function(){
    // map.removeLayer(address) ;
    $.getJSON("get_address.php", function podaci(data) {
      for (var i = 0; i < data.length; i++) {
        var location = new L.LatLng(data[i].lat, data[i].lng);
        var objectid = "<div style='font-size: 12px; text-align: left; margin-left: auto; margin-right: auto;'><b style='font-size: 12px;'>ID Lokacije: </b>"+ data[i].objectid +"</div>";
        var ulica = "<div style='font-size: 12px; text-align: left; margin-left: auto; margin-right: auto;'><b style='font-size: 12px; text-align: left;'>Ulica: </b>"+ data[i].ulica +"</div>";
        var kb = "<div style='font-size: 12px; text-align: left; margin-left: auto; margin-right: auto;'><b style='font-size: 12px; text-align: left;'>Kb: </b>"+ data[i].kb +"</div>";

        var marker = new L.Marker(location, {
          title: data[i].tipovi,
          icon: ostalo_icon
        });
        marker.bindPopup("<div>"+ objectid + ulica + kb +  "</div>", {maxWidth: '400', maxHeight: '400'});
        marker.addTo(address);
      }
    })
   });
  }

所有这些都正常工作。问题是当移动地图添加了一个新点但没有删除已经存在的(加载以前的移动地图)。我希望每次移动地图时先清理地图(removeLayer),然后再次添加相同的图层。那可能吗? 我试过插入'map.removeLayer(地址);'在 'map.on ('Moveendi', function () {...' 之后删除图层并且不将其添加回来。

【问题讨论】:

  • 试试address.clearLayers(); 而不是removeLayer

标签: javascript leaflet


【解决方案1】:

当地图开始移动时清除图层:

map.on("movestart", function() {
   address.clearLayers();
});

比移动结束时添加新标记:

map.on("moveend", function() {
   // ..
   marker.addTo(address);
});

【讨论】:

  • tnx 你。就是这样!
猜你喜欢
  • 1970-01-01
  • 2017-05-30
  • 1970-01-01
  • 1970-01-01
  • 2014-05-16
  • 1970-01-01
  • 1970-01-01
  • 2017-03-31
  • 1970-01-01
相关资源
最近更新 更多