我在项目中使用位于http://upload.wikimedia.org/wikipedia/commons/3/32/Blank_US_Map.svg的 SVG并与 d3.js 进行交互。我想创建一个点击缩放效果,如http://bl.ocks.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 是否本机支持这样的东西?