D3.js ライブラリを使用して、米国国勢調査シェープファイルからマップを作成しています。米国全体の地図を作成しようとしていますが、これは問題ありません。また、各州の地図も作成します。
私のワークフローでは、コマンド ラインで ogr2ogr によって必要に応じて変更された国勢調査データを使用します。次に、topojson モジュールの node.js ダウンロードのエラーにより、shpescape.com によって topojson または geojson に変換されます (この特定の編集されたソリューションについては、以下を参照してください)。問題)。
私の質問は、何よりも実用的な質問です。このコードを提示すると(http://bl.ocks.org/mbostock/4707858をモデルにしています):
var width = 640,
height = 500;
var projection = d3.geo.albers();
var path = d3.geo.path()
.projection(projection);
var svg = d3.select("body").append("svg")
.attr("width", width)
.attr("height", height);
d3.json("mt_geo.json", function(error, mt_topo) {
var states = topojson.feature(mt_topo, mt_topo.objects.states),
state = states.features.filter(function(d) { return d.id === 34; })[0];
projection
.scale(1)
.translate([0,0]);
var b = path.bounds(state),
s = .95 / Math.max ((b[1][0]-b[0][0])/width, (b[1][1]-b[0][1])/height),
t = [(width-s*(b[1][0]+b[0][0]))/2, (height-s*(b[1][1]+b[0][1]))/2];
projection
.scale(s)
.translate(t);
svg.append("path")
.datum(states)
.attr("class", "feature")
.attr("d", path);
svg.append("path")
.datum(topojson.mesh(us, us.objects.states,function(a, b) {return a !== b;}))
.attr("d", path);
svg.append("path")
.datum(state)
.attr("class", "outline")
.attr("d", path);
「var states」行で「未定義のプロパティの型を読み取れません」というエラーがスローされるだけでなく、無名関数に何を渡すべきなのか、または mt_topo.objects が何なのかわかりません。 .states が参照することになっています。この種の GIS に関する適切なドキュメントはありません。すべての国勢調査マップに「州」機能がありますか? .shp を topojson に圧縮すると、その情報が失われますか?
簡単に言えば、d3.json が (object, function(error, json)) を取る場合、実際に機能する例はどのようなものでしょうか?
編集: 回避策と Windows 7 の特異性 -----
ほとんどのチュートリアルでは、node.js のモジュールを使用するように指示されていますが、私は Windows7 を使用しており、正規のコマンドライン "npm install -g topojson" は "at contextify" で失敗します。作成者は、この問題を回避するための素敵なリンクを送ってくれました。
topojson のコマンド ラインには、geojson の既存の機能を topojson のアクセス可能なオブジェクトにパッケージ化できるフラグがあるため、これは重要です。たとえば、上記のコードは topojson で「states」を使用しています。これは、次のコマンドを使用しない限り、意味がなく、アクセスできないものです。
topojson -o us.topojson -- states=us_states.json
二重ハイフンと状態の間のスペースは重要です。その後、上記の元のコードに示すように、us.objects.states を介して状態にアクセスできます。