プロジェクトでhttp://upload.wikimedia.org/wikipedia/commons/3/32/Blank_US_Map.svgにある SVG を使用し、d3.js とやり取りしています。http://bl.locks.org/2206590のようなクリック ツー ズーム効果を作成したいのですが、その例では重心を計算するために JSON オブジェクトに格納されたパス データに依存しています。既存の SVG からパス データを d3 にロードして重心を取得する方法はありますか?
これまでの私の(ハックな)試み:
function get_centroid(sel){
var coords = d3.select(sel).attr('d');
coords = coords.replace(/ *[LC] */g,'],[').replace(/ *M */g,'[[[').replace(/ *z */g,']]]').replace(/ /g,'],[');
return d3.geo.path().centroid({
"type":"Feature",
"geometry":{"type":"Polygon","coordinates":JSON.parse(coords)}
});
}
これは、ミズーリ州などの一部の州では機能するようですが、ワシントンなどの他の州では失敗します。これは、私の SVG データの解析が非常に初歩的なためです。d3 はこのようなものをネイティブにサポートしていますか?