2017-08-08 171 views
0

我試圖建立使用leaflet.jsleaflet.heat從數據熱圖我在JSON格式。到目前爲止,我已經能夠使用jQuery的getJSON獲取並解析我的JSON文件,但是我被卡在了循環遍歷文件並返回數組leaflet.heat需要在傳單頂部構建heatmap圖層的部分。循環遍歷JSON對象和將它們轉換爲數組

根據leaflet.heat的文檔,我需要傳遞給庫是像這樣構成的陣列:

[latitude, longitude, intensity] 

我的JSON是這樣的:

[{"Lat":"39.51","Long":"-76.164","Intensity":"0.0017980221756068300"}, 
{"Lat":"39.463","Long":"-76.12","Intensity":"0.0332634102487264000"}, 
...more data...] 

這裏是我的代碼:

$.getJSON('data.json', 
    function(data){ 
     var heat = L.heatLayer(data, {radius: 25}).addTo(map); 
    }); 
}); 

當我運行這個,我得到以下錯誤:

TypeError: null is not an object (evaluating 't.lat') 

我假定這是從傳遞JSON 對象所得當庫需要陣列無鑰匙。我已經看了this similar SO question,但是當我記錄輸出到控制檯使用此代碼,

var arr = $.map(data, function(el) { return el }); 
console.log(arr); 

...它仍帶有按鍵的對象輸出。不知道我做錯了什麼。

+2

' 「緯度」 == 「LAT」'。 –

+0

你試圖構建的數組當然必須是2d以包含多個經緯度的熱量數據? –

+0

,因爲你沒有改變它....你只是在你的地圖中返回相同的東西。 – epascarello

回答

1

我覺得應該做的伎倆:

var arr = data.map(function(el) { 
    return [+el.Lat, +el.Long, +el.Intensity]; 
}); 

map爲您提供了一個陣列中的每個元素在一個時間,讓你改變它。

每個元素看起來像{"Lat":"39.51","Long":"-76.164","Intensity":"0.0017980221756068300"},並且您想要將它轉換爲類似[39.51, -76.164, 0.0017980221756068300]的東西。您可以使用.Lat.Long.Intensity讓每個這些值,和前面+值從字符串到數字轉換。

+0

可能需要從字符串中強制編號也 – charlietfl

+0

啊,好點。編輯。 – smarx

+1

注意,'$ .MAP()'將會把所有的值與該代碼的單個陣列:https://jsfiddle.net/h1pf4dwf/。如果你想要一個二維數組,你需要雙重包裝輸出,例如。 '[[+ el.Lat ...]]':https://jsfiddle.net/h1pf4dwf/1/。另外,您可以使用原生'圖()'功能,完全避免了問題:https://jsfiddle.net/h1pf4dwf/2/ –

-1

你其實並不需要手動解析它。現代瀏覽器支持JSON反序列化:

var json_string = file.read("filename"); 
var json_to_array = JSON.parse(json_string);