javascript 传单:更新地图

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/29776775/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-28 11:03:08  来源:igfitidea点击:

Leaflet: update map

javascriptleaflet

提问by Eleanore

Here is my function that I use to draw a Leaflet map in my website:

这是我用来在我的网站上绘制传单地图的函数:

function drawTweetMap(points) {
    if (tweetMap != null)
        tweetMap.remove();  

    var london = [51.505, -0.09];
    tweetMap = L.map('tweetMap').setView(london, 5);

    var cloudmadeUrl = 'http://{s}.mqcdn.com/tiles/1.0.0/osm/{z}/{x}/{y}.jpg';
    var subDomains = ['otile1','otile2','otile3','otile4'];
    var cloudmadeAttrib = 'Data, imagery and map information provided by <a href="http://open.mapquest.co.uk" target="_blank">MapQuest</a>, <a href="http://www.openstreetmap.org/" target="_blank">OpenStreetMap</a> and contributors, <a href="http://creativecommons.org/licenses/by-sa/2.0/" target="_blank">CC-BY-SA</a>';
    L.tileLayer(cloudmadeUrl, 
                  {attribution: cloudmadeAttrib, 
                   maxZoom: 18,
                   subdomains: subDomains})
    .addTo(tweetMap);

    var markers = L.markerClusterGroup();
    var points_rand = L.geoJson(points, {onEachFeature: onEachFeature});
    markers.addLayer(points_rand);
    tweetMap.addLayer(markers);
    tweetMap.fitBounds(markers.getBounds());
}

This function is called periodically:

此函数会定期调用:

mapWatch = setInterval(function() {
    retrieveCurrentTweetPositions()},
numMinutes*60*1000);

in this function:

在这个函数中:

function retrieveCurrentTweetPositions() {
    var points = retrieveCurrentPositions();
    var mapInput = translatePointsInMapFormat(points);
    drawTweetMap(mapInput);
}

Unfortunately, if the map is drawn in this way, the result is the following: enter image description here

不幸的是,如果以这种方式绘制地图,结果如下: 在此处输入图片说明

In other questions I found that it is possible to invalidate the size of the map to fix this problem, so it was suggested to call on startup this function:

在其他问题中我发现可以使地图的大小无效来解决这个问题,所以建议在启动时调用这个函数:

function updateTweetMapPosition() { 
    setTimeout(function(){
        tweetMap.invalidateSize(true);}
    ,500)
}

I did so, and this solves the problem during the first map drawing. However, when I try to redraw the map for a second time, the result is as follows:

我这样做了,这解决了第一次绘制地图时的问题。但是,当我尝试第二次重绘地图时,结果如下:

enter image description here

在此处输入图片说明

Has anyone experienced this problem? How can I redraw the map with a full loading of its content?

有没有人遇到过这个问题?如何重新绘制地图并加载其内容?

Thanks.

谢谢。



EDIT

编辑

Here is the jsFiddle: http://jsfiddle.net/qzpwvqzk/

这是 jsFiddle:http: //jsfiddle.net/qzpwvqzk/

回答by Brett DeWoody

Take a look at the redraw()method.

看一下redraw()方法。