【发布时间】:2012-08-17 06:04:29
【问题描述】:
我在一个项目中使用位于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 本身是否支持这样的东西?
【问题讨论】:
-
这是DOM interface for SVG paths。这可能是一个很好的起点。
标签: javascript svg d3.js