刷新传单地图:地图容器已经初始化

IT技术 javascript leaflet
2021-02-09 08:28:02

我有一个页面,其中给了用户一个选择,他可以切换我显示的传单地图。

在初始传单地图加载后,我的问题是我想刷新地图。

我总是得到“地图容器已经初始化”:

问题线是:

var map = L.map('mapa').setView([lat, lon], 15);

最初它加载得很好,但是当我在表单中选择另一个参数并希望再次显示地图时它崩溃了。

顺便说一句,我试图$('#mapa')在第二次之前用 jQuery销毁和重新创建setView()但它显示了相同的错误。

6个回答

试着map.remove();尝试重新加载地图前。这将使用 Leaflet 的库(而不是 jquery 的)删除先前的地图元素。

如果(地图!= 未定义){ map.remove(); 如果您不确定地图是否在那里..
2021-04-14 08:28:02

网址:

<div id="weathermap"></div>

JavaScript:

function buildMap(lat,lon)  {
    document.getElementById('weathermap').innerHTML = "<div id='map' style='width: 100%; height: 100%;'></div>";
    var osmUrl = 'http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',
                    osmAttribution = 'Map data © <a href="http://openstreetmap.org">OpenStreetMap</a> contributors,' +
                        ' <a href="http://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>',
    osmLayer = new L.TileLayer(osmUrl, {maxZoom: 18, attribution: osmAttribution});
    var map = new L.Map('map');
    map.setView(new L.LatLng(lat,lon), 9 );
    map.addLayer(osmLayer);
    var validatorsLayer = new OsmJs.Weather.LeafletLayer({lang: 'en'});
    map.addLayer(validatorsLayer);
}

我用这个:

document.getElementById('weathermap').innerHTML = "<div id='map' style='width: 100%; height: 100%;'></div>";

重新加载渲染地图的 div 内容。

可能适用于普通的 html,但在像 React 这样的库中,它不是由于选择性 div 操作。
2021-03-27 08:28:02

最好的方法

map.off();
map.remove();

您应该添加 map.off(),它的运行速度也更快,并且不会导致事件出现问题

对不起,你怎么用这个?
2021-03-19 08:28:02
@djack109 保留地图处理程序对象的引用。您可以从地图的 onReady 事件中获取此信息。然后您可以在该处理程序对象上调用这两个方法。如果这还不清楚,我很乐意提供一个例子。
2021-04-03 08:28:02

在初始化地图之前检查地图是否已经启动

var container = L.DomUtil.get('map');
      if(container != null){
        container._leaflet_id = null;
      }

只用这个

map.invalidateSize();

https://github.com/Leaflet/Leaflet/issues/690

这是唯一对我有用的解决方案。
2021-04-12 08:28:02