7

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 を介して状態にアクセスできます。

4

2 に答える 2

0

通常、マップを表す GeoJSON ファイルには 1 つ以上のフィーチャがあります。各機能には、0 個以上のプロパティがあります。通常、プロパティは場所のメタデータ (州名、郡など) を格納するために使用されます。GeoJSON ファイルを読み取ってそのプロパティを確認し、このプロパティを使用してフィーチャを表示または非表示にすることができます。

ファイルを GeoJSON から TopoJSON に変換する場合、元のプロパティを保持または削除できます。たとえば、チュートリアルLet's Make a Map のuk.jsonファイルのフィーチャとポイントには、プロパティがあります。name

于 2013-09-17T12:06:25.813 に答える