簡體   English   中英

將JSON值轉換為數組

[英]Converting JSON values to an array

我使用傳單地圖和html5地理定位。 我有一個視圖,從node.js服務器接收coords並為每個唯一ID添加標記,並在新coords進入時更新它們的位置。我將標記對象存儲在對象中,ID作為鍵,標記為價值。 因此,跟蹤兩個設備時, markers對象看起來像這樣:

Object {qwpW9K0L1OtOhsV3CF0G: e, syeQs_oH7s8z8f0UCF0I: e}

其中e是實際標記。

我正在研究的問題是傳單api喜歡接收數據數組。 例如,我想使用要素組和map.fitBounds(...)將地圖視圖邊界擬合到標記。 因此,我正在迭代對象並將標記推入新數組並在每次創建新標記時更新地圖邊界或新的coords進入並且它看起來非常低效並且只是以錯誤的方式執行它。

完成socket.io代碼塊我正在研究:

socket.on('markerCoords', function(data) {
    var markerGroup = [];
    if(data.id in markers) {
        markers[data.id].setLatLng([data.data.latitude, data.data.longitude]);
        $.each(markers, function(i, e) {
            markerGroup.push(e);
        });
        var group = new L.featureGroup(markerGroup);
        map.fitBounds(group.getBounds().pad(0.5));
    } else {
        var marker = L.marker([data.data.latitude, data.data.longitude], {"title": data.id, "draggable": true}).addTo(map);
        markers[data.id] = marker;
        $.each(markers, function(i, e) {
            markerGroup.push(e);
        });
        var group = new L.featureGroup(markerGroup);
        map.fitBounds(group.getBounds().pad(1.0));
   }
});

看起來一種可能的解決方案是僅創建一次要素組並在必要時更新它:

var group = new L.featureGroup();

socket.on('markerCoords', function(data) {
    var markerGroup = [];
    if(data.id in markers) {
        markers[data.id].setLatLng([data.data.latitude, data.data.longitude]);
        map.fitBounds(group.getBounds().pad(0.5));
    } else {
        markers[data.id] = L.marker(
            [data.data.latitude, data.data.longitude],
            {"title": data.id, "draggable": true}
        ).addTo(map);

        group.addLayer(markers[data.id]);
        map.fitBounds(group.getBounds().pad(1.0));
    }
});

您也可以在啟動時將該組添加到地圖中,而不是單獨添加每個標記。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM