2017-04-03 50 views
0

我發現很少有關於使用JSON文件使用公用密鑰映射和加入指標的CSV文件的d3文檔。在使用d3.queue()時加入CSV和TopoJSON()

如果可能,我想利用d3.queue()。到目前爲止,我一直在使用d3.map().set,但我發現它用於單個鍵值對,並且似乎不適用於> 1個值。如果我在這裏有人請糾正我。

我正試圖利用在this bl.ock中找到的雙重for循環。這裏的創建者正在使用兩個JSON文件,並且我已經很少運氣來根據我的需要進行裁剪。鏈接到他的兩個JSON文件在下面,這是值得的。

tv.json

neilsontopo.json

連接鍵(我好得多說話SQL比JS)使用從JSON和在CSV的county_fipscounties.id

問題是CSV中的county_fips與指標相關的指標變平了嗎?上面鏈接示例中的雙for循環使用JSON的層次結構。

d3.queue() 
    .defer(d3.json, "https://d3js.org/us-10m.v1.json") 
    //.defer(d3.csv, "countymetrics_json.csv" , function(d) {metrics.set(d.county_fips, +d.actual_margin);}) 
    .defer(d3.csv, "https://raw.githubusercontent.com/MatthewSnellOKC/mapping/master/merge/countymetrics_json.csv", function(d) {metrics.set(d.county_fips, +d.actual_margin);}) 
    .await(ready); 

function ready (error, us) { 
    if (error) throw error; 
    var counties = us.objects.counties.geometries; 
} 

回答

0

我已經使用d3.queue()d3.map().set轉移,並能夠使用雙for循環加入的CSV JSON。請參閱下面的工作代碼。

d3.json("https://d3js.org/us-10m.v1.json", function(error, us) { 
    if (error) throw error; 

    d3.csv("countymetrics_json.csv", function(error, csv) { 
     var counties = us.objects.counties.geometries; 

     csv.forEach(function(d, i) { 
      counties.forEach(function(e, j) { 
       if (d.county_fips == e.id) { 
        e.actual_margin = d.actual_margin; 
        e.state_code = d.state_code; 
        e.state_name = d.state_name; 
        e.county = d.county; 
        e.county_population = d.county_population; 
        e.business_population = d.business_population; 
        e.active_merchants = d.active_merchants; 
        e.actual_margin = d.actual_margin; 
       } 
      }) 
     }) 
    }) 
});