javascript - Leaflet -> 删除 CircleLayer 不起作用

标签 javascript html leaflet

我正在尝试从 map 中删除一个圆形图层以绘制一个新图层。

我尝试过不同的解决方案,但没有一个适合我。

也许有人能找到办法。

<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta charset="utf-8" />
<title></title>    
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.5.1/dist/leaflet.css"
    integrity="sha512-xwE/Az9zrjBIphAcBb3F6JVqxf46+CDLwfLMHloNu6KEQCAWi6HcDUbeOfBIptF7tcCzusKFjFw2yuvEpDL9wQ=="
    crossorigin=""/>
<script src="https://unpkg.com/leaflet@1.5.1/dist/leaflet.js"
   integrity="sha512-GffPMF3RvMeYyc1LWMHtK8EbPv0iNZ8/oTtHPx9/cc2ILxQ+u905qIwdpULaqDkyBKgOaB57QTMg7ztg8Jm2Og=="
   crossorigin="">
</script>
<script src="Scripts/jquery-3.4.1.min.js"></script>
<style type="text/css">
    #mapid {height: 480px; width: 480px;}
</style>
</head>
<body>
    <div id="mapid">
    </div>
    <p>Umkreis Km<select id="umkreis">
        <option value="--">--</option>
        <option value="10">10</option>
        <option value="20">20</option>
        <option value="50">50</option>
    </select></p>
    <script>
        var latitude = 0;
        var longitude = 0;
        // Creating the Map
        var mymap = L.map('mapid').setView([53.079, 8.801], 13);
        L.tileLayer('https://api.tiles.mapbox.com/v4/{id}/{z}/{x}/{y}.png?access_token={accessToken}', {
            attribution: 'Map data&copy;<a href="https://www.openstreetmap.org/">OpenStreetMap</a> contributors, <a href="https://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>, Imagery © <a href="https://www.mapbox.com/">Mapbox</a>',
            maxZoom: 18,
            id: 'mapbox.streets',
            accessToken: 'pk.eyJ1IjoicGVpY2tlciIsImEiOiJjazBveW9pcmQwZWV0M25vMHh4dnRkdmM3In0.JwNOtv10EsQrukcXe-Q2sQ'
        }).addTo(mymap);

        function onMapClick(e) {
            if (circles != undefined) {
                mymap.removeLayer(circles);
            }
            if (document.getElementById("umkreis").value == "--") {
                alert("nothing");
            }
            else {
                var fence = document.getElementById("umkreis").value * 100;
                alert(fence);
            }
            latitude = e.latlng.lat;
            longitude = e.latlng.lng;
            var circles = L.circle([latitude, longitude], {
                color: 'red',
                fillColor: '#f03',
                fillOpacity: 0.5,
                radius: fence
            }).addTo(mymap);
            //alert("Latitude: " + e.latlng.lat + " Longitude: " + e.latlng.lng);
        }
        mymap.on('click', onMapClick);
    </script>
</body>
</html>

我什至尝试添加一个 Layergroup 并向其添加一个圆圈,然后使用 removeLayer() 和 clearLayers() 将其删除,就像有人在 Stack Overflow 中使用它来解决同样的问题一样。

最佳答案

现在可以使用的 fiddle 的编辑版本:

<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">

<meta charset="utf-8" />

<title></title>    

<link rel="stylesheet" href="https://unpkg.com/leaflet@1.5.1/dist/leaflet.css"
    integrity="sha512-xwE/Az9zrjBIphAcBb3F6JVqxf46+CDLwfLMHloNu6KEQCAWi6HcDUbeOfBIptF7tcCzusKFjFw2yuvEpDL9wQ=="
    crossorigin=""/>
<script src="https://unpkg.com/leaflet@1.5.1/dist/leaflet.js"
   integrity="sha512-GffPMF3RvMeYyc1LWMHtK8EbPv0iNZ8/oTtHPx9/cc2ILxQ+u905qIwdpULaqDkyBKgOaB57QTMg7ztg8Jm2Og=="
   crossorigin="">
</script>
<script src="Scripts/jquery-3.4.1.min.js"></script>
<script>

</script>
<style type="text/css">
    #mapid {height: 480px; width: 480px;}
</style>
</head>
<body>
    <div id="mapid">
    </div>
    <p>Umkreis Km<select id="umkreis">
        <option value="--">--</option>
        <option value="10">10</option>
        <option value="20">20</option>
        <option value="50">50</option>
    </select></p>
    <script>

        var latitude = 0;
        var longitude = 0;
        var circles;
        // Creating the Map
        var mymap = L.map('mapid').setView([53.079, 8.801], 13);
        L.tileLayer('https://api.tiles.mapbox.com/v4/{id}/{z}/{x}/{y}.png?access_token={accessToken}', {
            attribution: 'Map data&copy;<a href="https://www.openstreetmap.org/">OpenStreetMap</a> contributors, <a href="https://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>, Imagery © <a href="https://www.mapbox.com/">Mapbox</a>',
            maxZoom: 18,
            id: 'mapbox.streets',
            accessToken: 'pk.eyJ1IjoicGVpY2tlciIsImEiOiJjazBveW9pcmQwZWV0M25vMHh4dnRkdmM3In0.JwNOtv10EsQrukcXe-Q2sQ'
        }).addTo(mymap);

        function onMapClick(e) {

            //circles.remove();
            //if (mymap.hasLayer(circles)) {
            //    alert("yes");
            //}

            if (circles != undefined) {
                mymap.removeLayer(circles);
                mymap.clearLayers();
            }
            if (document.getElementById("umkreis").value == "--") {
                alert("nothing");
            }
            else {
                var fence = document.getElementById("umkreis").value * 100;
                alert(fence);
            }
            latitude = e.latlng.lat;
            longitude = e.latlng.lng;
             circles = L.circle([latitude, longitude], {
                color: 'red',
                fillColor: '#f03',
                fillOpacity: 0.5,
                radius: fence
            }).addTo(mymap);
            //alert("Latitude: " + e.latlng.lat + " Longitude: " + e.latlng.lng);
        }
        mymap.on('click', onMapClick);


    </script>
</body>
</html>

关于javascript - Leaflet -> 删除 CircleLayer 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58008845/

相关文章:

javascript - 无法让 onMouseEnter 改变 react.js 中的状态

javascript - 单击并更改处理程序在 Chrome 上同时触发

javascript - 如何使用 AngularJs 从表生成 JSON 来保存表格数据?

javascript - 如何使用 React-leaflet v3 在 map 加载时将 map 设置为地理位置

javascript - 如何获取传单上触摸的 LatLng

javascript - JQuery 控制台错误

javascript - 为什么 nodejs 不支持 Web Audio API?

javascript - 如何在react-leaflet中调用fitBounds和getBounds?

jquery - 在汉堡菜单中隐藏列表项

html - 高度:vh;在移动 chrome 中无法正常工作