javascript - 传单 map 不适合边界

标签 javascript leaflet

我正在尝试使 map 适合二维数组定义的边界。我一直收到错误 Error: Bounds are not valid。 leaflet.js:5:21909 即使标记已添加到 map 并且是有效坐标。

var map = L.map('map', { zoomControl:false });
L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png', {
    attribution: '&copy; <a href="http://openstreetmap.org/copyright">OpenStreetMap contributors</a>'
}).addTo(map);



map.setView([0, 0], 2);

var markers = new L.FeatureGroup();
map.addLayer(markers);


function drawResults(){
    // get offer keys
    var offers = new Array();
    var articles = [];


    offersRef.once("value", function(snapshot) {        
        var offerKeys = Object.keys(snapshot.val());
        for (var i=0; i<offerKeys.length; i++){
            var offer = snapshot.val()[offerKeys[i]];           
            var lat = offer.lat;                
            var lng = offer.lng;
            console.log(lat);// outputs 33.2321
            console.log(lng);// outputs 101.1234
            offers.push([lat, lng]);
            var marker = L.marker([lat, lng]).addTo(markers);
        }

    });
    map.fitBounds(markers.getBounds());

    }
    console.log(offers);    

}

drawResults();

谁能看出我做错了什么?

编辑: 控制台日志

35.0721909  app.js:350:13
-106.48798399999998  app.js:351:13
35.0526641  app.js:350:13
-78.87835849999999  app.js:351:13

最佳答案

您需要将对 map.fitBounds 的调用移动到回调中,因为 once 方法(看起来像 Firebase API 调用)可能是异步的:

offersRef.once("value", function(snapshot) {
    var offerKeys = Object.keys(snapshot.val());
    for (var i = 0; i < offerKeys.length; i++) {
        var offer = snapshot.val()[offerKeys[i]];
        var lat = offer.lat;
        var lng = offer.lng;
        offers.push([lat, lng]);
        var marker = L.marker([lat, lng]).addTo(markers);
    }
    map.fitBounds(markers.getBounds());
});

如果在回调之外调用,则特征组中将没有任何标记,并且组的边界将无效。

关于javascript - 传单 map 不适合边界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41541804/

相关文章:

javascript - 正则表达式要求的格式

javascript - 为什么js中将 'this'对象赋值给局部变量

leaflet - 传单适配问题

javascript - 传单:通过点击功能缩放到标记

javascript - 尝试将 HTML 元素作为文本传递给 React 组件

javascript - 导航栏缩小,滚动内容发生变化

php - jquery 自动完成 : autocomplete does not stop if string does not match

leaflet - Mapbox 鼠标右键单击

javascript - map 未在 LeafletJS 中呈现 - 出现空白页面且没有错误

r - 如何创建由数字变量着色的传单标记