leaflet.js刷新地图onclick

时间:2014-02-12 00:48:48

标签: javascript map leaflet

我正在使用Leaflet来显示地图。一切正常,直到我添加了一个复选框来切换地图的数据。 我为这个观点写了这样的话:

<input type="checkbox" name="switch" class="switch-checkbox"onclick="change();" checked>

对于js中的函数:

function change()
{
    var map = L.map('map').setView([37.8, -96], 4);

    L.tileLayer('http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
        maxZoom: 18
    }).addTo(map);

    if (document.querySelector('.onoffswitch-checkbox').checked) {
        data = statesData;
        L.geoJson(statesData).addTo(map);
    } else {
        L.geoJson(statesDataTwo).addTo(map);
    }

然后我收到一个错误,表明地图已经初始化了。我在添加新地图之前尝试添加map.remove();。与建议的here一样。但地图未定义。这样做的方法是什么?感谢

1 个答案:

答案 0 :(得分:3)

为什么要添加新地图?您可能已将它放在全局变量map中,该变量在加载时初始化。使用此功能并在更改/单击时仅更改图层。像这样:

var map = L.map('map').setView([37.8, -96], 4);
L.tileLayer('http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
    maxZoom: 18
}).addTo(map);

var geojsonLayers = {
    'states': L.geoJson(statesData),
    'statesTwo': L.geoJson(statesDataTwo)
};

function change()
{
    if (document.querySelector('.onoffswitch-checkbox').checked) {
        map.addLayer(geojsonLayers.states);
        if (map.hasLayer(geojsonLayers.statesTwo)) {
            map.removeLayer(geojsonLayers.statesTwo);
        }
    } else {
        map.addLayer(geojsonLayers.statesTwo);
        if (map.hasLayer(geojsonLayers.states)) {
            map.removeLayer(geojsonLayers.states);
        }
    }
}