2013-11-01 27 views
0

我正在使用美國人口普查ACS API來提取美國所有縣的數據。然後,我想根據這些值生成一個縣級別的等值線圖。如果我有一個靜態數據文件(一個帶區號:值的CSV),我可以渲染數據。但是,從API的數據回來爲:格式人口普查ACS API數據用於Choropleth地圖

0: "B08101_025E" 
1: "NAME" 
2: "state" 
3: "county" 
... 
0: "42" 
1: "Autauga County, Alabama" 
2: "01" 
3: "001" 

的數據出現在被需要:值,使得上述會是什麼樣子(忽略頭元素):

01001: 42 

我想我我正在混淆數據的格式以及預期的輸出結果。最後,我在做什麼是這樣的:

var pad = d3.format("05d"), 
    quantize = d3.scale.quantile().domain([0, 15]).range(d3.range(9)); 

    d3.json("us-counties.json", function (json) { 
     counties.selectAll("path") 
     .data(json.features) 
     .enter().append("svg:path") 
     .attr("class", function (d) { 
      return "q" + quantize(dataSet[pad(d.id)]) + "-9"; 
     }) 
     .attr("d", path) 
     .on("click", click) 
     .append("svg:title") 
     .text(function (d) { 
      return d.properties.name + ": " + dataSet[pad(d.id)] + "%"; 
     }); 
    }); 

這是從here拍攝。請注意,dataSet[pad(d.id)]沒有匹配,因爲數據不在我認爲需要的鍵/值對中。如何以預期的格式獲得此信息?我已經嘗試過製作dataSet是一個二維數組:

0: "01001" 
1: 42 

這仍然不具有所期望的結果。

回答

0

嗯,它看起來有助於問這個問題。從那以後,我通過這個問題再一次走了進來,這樣做:

var dataObj = {}; 
      d3.json(jsonRequest, function (data) { 
       $.each(data, function (key, val) { 
        if (key > 0) { 
         var apiValue = parseInt(val[0], 10); 
         var apiState = val[2]; 
         var apiCounty = val[3]; 
         //var elmentArray = [apiState + apiCounty, apiValue]; 
         //dataSet.push(elmentArray); 
         dataObj[apiState + apiCounty] = apiValue; 
        } 
       }); 
... 
return d.properties.name + ": " + dataObj[pad(d.id)] + "%"; 

唯一的問題是現在,當我更改數據源中的數據沒有更新。

+0

您可以簡單地將'dataObj'重置爲空,並在切換到新的數據源時再次執行轉換。 –

+0

它已被重置。 'dataObj'被更新,但是使用'dataObj'的代碼似乎沒有被觸發(它在dataObj循環設置後的showData()函數塊中)。 – wergeld

+0

你可以明確地調用它。 –

相關問題