2013-05-24 10 views
10

topojsonで遊ぶのが楽しいですが、topojson.objectはtopojsonのV1で定義されていないようです(V0でサポートされています)。誰かがこの問題を回避する方法を説明できますか?私はtopojsonとしてフォーマットされた入力ファイル内の各ポリゴンに別個のパス要素を描こうとしています。コードはtopojson.opject in topojson V1

d3.json("maTopo.json", function(error, ma) { 
    svg.selectAll(".subunit") 
     .data(topojson.object(ma, ma.objects.ma).geometries) 
    .enter().append("path") 
     .attr("class", function(d) { return "subunit " + d.id; }) 
     .attr("d", path); 
}); 
+0

http://stackoverflow.com/questions/17404239/を参照してください。 – Hugolpz

答えて

15

topojson.featureの代わりに使用できます。

d3.json("maTopo.json", function(error, ma) { 
    svg.selectAll(".subunit") 
     .data(topojson.feature(ma, ma.objects.ma).features) 
    .enter().append("path") 
     .attr("class", function(d) { return "subunit " + d.id; }) 
     .attr("d", path); 
}); 

詳細な例は、ここで見つけることができます:http://bost.ocks.org/mike/map/

3

v1のリリースはtopojson.featureでtopojson.objectを置き換えます。その動作は似ていますが、新しいtopojson.featureメソッドは、GeoJSONとの互換性を高めるために、FeatureまたはFeatureCollection(GeometryまたはGeometryCollectionではなく)を返します。

@mbostockの言葉はthis threadです。したがって、あなたのコード内の1つの文字列をこれに変更してください:.data(topojson.feature(ma, ma.objects.ma).features)。 GeoJSONからv1でTopoJSONファイルを再生成する必要があると思います。