2017-08-08 8 views
0

JSON形式のデータからleaflet.jsleaflet.heatを使用してヒートマップを作成しようとしています。これまでのところ、jQueryのgetJSONを使用してJSONファイルを取得して解析することができましたが、ファイルをループして配列のリーフレットを返す部分に固執しています。リーフレットの上にヒートマップレイヤーを作成する必要があります。 leaflet.heatのマニュアルによると、私は図書館に渡すために必要なすべてがそうのように構築配列ですJSONオブジェクトをループして配列に変換する

[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 "!==" lat "' –

+0

確かに、構築しようとしている配列は複数のlat/lngのヒートデータを格納するために2dでなければなりませんか? –

+0

あなたはそれを変換していないので....あなたの地図に同じ正確なものを返すだけです。 – epascarello

答えて

1

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

mapはあなたの時間でのアレイ1の各要素を与え、あなたはそれを変換することができます。

各要素は{"Lat":"39.51","Long":"-76.164","Intensity":"0.0017980221756068300"}のようになり、[39.51, -76.164, 0.0017980221756068300]のように変換します。 .Lat.Long、および.Intensityを使用してそれぞれの値を取得することができ、前述の+は値を文字列から数値に変換します。

+0

は、おそらく文字列から数字に強制する必要があります – charlietfl

+0

ああ、良い点。編集されました。 – smarx

+1

'$ .map()'はすべての値をこのコードで1つの配列に配置することに注意してください:https://jsfiddle.net/h1pf4dwf/。 2次元配列が必要な場合は、出力を二重にラップする必要があります。 '[[+ el.Lat ...]]':https://jsfiddle.net/h1pf4dwf/1/。代わりに、ネイティブの 'map()'関数を使用して、問題を完全に回避することもできます:https://jsfiddle.net/h1pf4dwf/2/ –

-1

実際に手動で解析する必要はありません。現代のブラウザはJSONの逆シリアル化をサポートしています:

var json_string = file.read("filename"); 
var json_to_array = JSON.parse(json_string); 
関連する問題