2013-08-18 53 views
5

加載美國郵政編碼topojson文件後,我在d3.js中收到錯誤。 groupdata未定義在這條線:映射美國郵政編碼與topojson的錯誤

function bind(group, groupData) { 
    var i, n = group.length, m = groupData.length, n0 = Math.min(n, m), updateNodes = new Array(m), enterNodes = new Array(m), exitNodes = new Array(n), node, nodeData; 

與錯誤:

Uncaught TypeError: Cannot read property 'length' of undefined 

我的代碼正在調用和創建的路徑是:

d3.json("data/us-atlas/us-zipcodes.json", function(error, topology) { 
    svg.selectAll("path") 
     .data(topojson.feature(topology, topology.objects.zipcodes).features) 
     .enter() 
     .append("path") 
     .attr("d", path) 
    }); 

我產生的郵政編碼topojson文件從此回購:https://github.com/mbostock/us-atlas。當我在加載時檢查拓撲對象時,我在topology.objects.zipcodes下看到了32893個弧。

我已成功加載縣下的chloropleth示例http://bl.ocks.org/mbostock/4060606,並使用類似的模式。

我使用d3.js版本3.2.8和topojson.js版本1.2.3。

任何想法?這是一個糟糕的郵政編碼文件,或者我說錯了嗎?

+0

如果你有一個[要點](https://gist.github.com/ )顯示你的代碼可以幫助我們。 – Hugolpz

回答

6

@Hugolpz - 抱歉,我沒有,我沒有迴應。我沒有收到您的評論通知。

我終於明白了。我在這裏錄音,所以也許會幫助別人。

我最初從美國人口普查網站獲得了我的郵政編碼shapefiles(目前因政府關機而關閉)。它被稱爲tl_2012_us_zcta510.zip並且是836MB。我試圖使用topojson轉換它使用參數@mbostock在這裏建議:http://bl.ocks.org/mbostock/4965422

轉換花了12小時給node.js 6 GB的內存將shapefile轉換爲topojson文件。它仍然不能在d3.js中工作(請參閱原始問題中的錯誤)。另外,調試這麼大的json文件也很難調試。原始shapefile也不會在QGIS中顯示。

我最終放棄並搜索了不同的數據集。 Geocommons有一個5MB的zipcode shapefile,其中包含郵政編碼,州名,姓名,人口和地區等信息:http://geocommons.com/overlays/54893。我移交給topojson和它轉換的shape文件在一分鐘之:

topojson \ 
-p name=PO_NAME \ 
-p zip=ZIP \ 
-p state=STATE \ 
-o zips_us_topo.json \ 
zip_codes_for_the_usa.shp 

爲了檢查JSON文件理解它,我用https://github.com/einars/js-beautify用這個命令:

js-beautify zips_us_topo.json -o zips_us_topo_pretty.json 

我用雖然因爲尺寸較小,所以可以在瀏覽器中加載未經過精化的版本。

爲了映射它,我基本上使用了與@ mbostock縣氯仿地圖相同的代碼。如果您需要或D3代碼或清理topojson文件,你可以讓他們在這裏:

https://gist.github.com/jefffriesen/6892860

http://bl.ocks.org/jefffriesen/6892860

+0

希望我早點發現了這一點。感謝發佈。 – kwcto

+0

感謝分享!當我開始採用相同的路徑並從美國人口普查下載相同的文件時,這非常有幫助。 – brhlavinka