2017-08-29 83 views
0

我有我的数据库中存储的图层样本,我试图在面板中显示此图层的名称,每个图层都与一个复选框相关联。当我检查每个checkbow时,我想在地图上添加其对应图层,并在复选框未选中时将其从地图中删除。我的问题是我无法从地图中删除图层。 这里是我的PHP和jQuery代码片段:使用复选框打开和关闭图层

** jQuery的文件**

$.get($("#myForm5").attr("action"), 
 
$("#myForm5 :input").serializeArray(), 
 
function(data) { 
 
$("#Liste").html(data); 
 
         $('input[id^="DisplayCheckbox"]').on('change', function() 
 
{ 
 
var CoordItem = $(this).parents("div.parent").find("li#Lis te").text(); 
 
var content = $(this).val(); 
 
var DataItem = $(this).parents("div.parent").find("li#ListeData").text(); 
 
var array = DataItem.split(','); 
 

 
var dataDomaine = $.parseJSON(CoordItem); 
 
var geojsonFeature = 
 
{ 
 
    "type": "Feature", 
 
    "properties": { 
 
    "name": content, 
 
    }, 
 
    "geometry": { 
 
     "type": dataDomaine.type, 
 
     "coordinates":dataDomaine.coordinates 
 
    } 
 
}; 
 
var layer = L.geoJson(geojsonFeature); 
 
        if($(this).is(":checked")) 
 
{ 
 
    layer.addTo(map); 
 
    map.fitBounds(layer.getBounds()); 
 
    
 
}else 
 
{  
 
               map.removeLayer(layer); 
 
           
 
    
 
});//end change checkbox 
 

 
});//end get function

PHP文件

<?php 
 
...... 
 
echo '<ul>' 
 
echo '<div id="' . $row2['nom'] . '" class="col-sm-10 parent"><li class="Liste" id="idListe">' . $row2['nom'] . '</li> 
 
<div class="checkbox DisplayLayer"> 
 
<label><input type="checkbox" name="id" id="DisplayCheckbox" value="' . $row2['nom'] . '"></label></div> 
 
<li id="ListeData" name="id" style="display:none;">' . $tostring. '</li>'; 
 
....... 
 
echo '<li id="ListeGeom" name="id" style="display:none;">' . $row3[0]. '</li></div><br/>'; 
 

 
echo '</ul> 
 
?>

回答

0

这是因为要卸下“新建“功能 - 没有对现有图层的引用。 之前layer.addTo(地图)给出层私有属性,例如layer._id = 1。在else块中,让我们迭代所有图层并尝试通过id找到它。事情是这样的:

map.eachLayer(function(layer){ 
    if(layer._id == 1) map.removeLayer(layer) 
}) 
+0

我会尽力的,谢谢@Sebastian舒尔茨 – nermiiine

+0

我面临的一个问题,我无法弄清楚如何动态地创建此ID,因为层添加到动态映射当每个复选框被选中,我不知道如何更改每个图层的图层ID。你能帮我吗? – nermiiine

+0

我还没有找到解决我的问题 – nermiiine