5

米国の郵便番号 topojson ファイルをロードした後、d3.js でエラーが発生します。groupdataこの行では定義されていません:

  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)
  });

このリポジトリから zipcode topojson ファイルを生成しました: https://github.com/mbostock/us-atlas。ロード時にトポロジ オブジェクトを調べると、topology.objects.zipcodes の下に 32893 個のアークが表示されます。

クロロプレスの例http://bl.ocks.org/mbostock/4060606で郡を正常にロードし、それと同様のパターンを使用しています。

d3.js バージョン 3.2.8 と topojson.js バージョン 1.2.3 を使用しています。

何か案は?それは悪いzipcodeファイルですか、それとも間違って呼んでいますか?

4

1 に答える 1

6

@Hugolpz - 申し訳ありませんが、応答しませんでした。コメントの通知が来ませんでした。

私はついにそれを理解しました。ここに記録しているので、誰かの助けになるかもしれません。

私は元々、米国国勢調査の Web サイトから郵便番号シェープファイルを取得しました (現在、政府の閉鎖のため停止しています)。それは tl_2012_us_zcta510.zip と呼ばれ、836MB でした。ここで提案された@mbostockのパラメーターを使用して、topojsonを使用して変換しようとしました: http://bl.ocks.org/mbostock/4965422

シェープファイルを topojson ファイルに変換するために node.js に 6 GB のメモリを与えると、変換には 12 時間以上かかりました。d3.js ではまだ機能しません (元の質問のエラーを参照してください)。また、その大きな json ファイルをデバッグするのは、デバッグが困難でした。元のシェープファイルも QGIS では表示されません。

結局あきらめて、別のデータ セットを検索しました。Geocommons には、郵便番号、州、名前、人口、地域などのプロパティを含む 5 MB の郵便番号シェープファイルがあります: http://geocommons.com/overlays/54893。それを topojson に渡すと、シェープファイルが 1 分以内に変換されました。

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

于 2013-10-09T03:18:33.537 に答える