Javascript 获取SVG路径和VML的中心
我正在尝试不同的东西: 我非常有兴趣了解不同国家的中心(这样我可以在这个国家上做一个小标记) 但我有点纠结于此,我试过几种方法,比如获取路径周围的方框,然后从中获取中心 但由于某些国家的某些形态,它有点失败。例如,美国,环绕框的中间位于加拿大Javascript 获取SVG路径和VML的中心,javascript,jquery,html,svg,vml,Javascript,Jquery,Html,Svg,Vml,我正在尝试不同的东西: 我非常有兴趣了解不同国家的中心(这样我可以在这个国家上做一个小标记) 但我有点纠结于此,我试过几种方法,比如获取路径周围的方框,然后从中获取中心 但由于某些国家的某些形态,它有点失败。例如,美国,环绕框的中间位于加拿大 可以有人帮我吗?< /P> < P>只要给定URL提供的SVG数据,就不可能计算出美国(或任何其他国家)考虑主要/中心部分的部分。 一个近似的解决方案是将最大的可填充区域计算为主要区域,并计算该区域的中心。不幸的是,SVG API没有提供面积计算方法 剩下
可以有人帮我吗?< /P> < P>只要给定URL提供的SVG数据,就不可能计算出美国(或任何其他国家)考虑主要/中心部分的部分。
一个近似的解决方案是将最大的可填充区域计算为主要区域,并计算该区域的中心。不幸的是,SVG API没有提供面积计算方法 剩下的就是可以迭代每个单独的路径段,计算它们各自的长度,并实现一个足够好的近似算法来找到主要部分的中心。请注意,只有“lineto”、“curveto”和“arcto”命令是通过调用path元素上的.getTotalLength()
可以获得的总路径长度的一部分
真正原始的代码框架:
var getCenterOfCountry = function (path) {
var posX, posY, i, ii, seg;
posX = 0;
posY = 0;
for (i=0, ii=path.pathSegList.numberOfItems; i<ii; i++) {
seg = path.pathSegList.getItem(i);
switch (seg.pathSegTypeAsLetter) {
case 'z':
case 'Z':
// handle case close path, update pos
break;
case 'M':
// handle case moveto abs, update pos
break;
case 'm':
// handle case moveto rel, update pos
break;
// ... handle all remaining cases, remember to update pos
default:
// handle case path segment unknown
}
}
};
var usPath, usCenterCoords;
usPath = document.querySelector('#jvectormap1_us');
usCenterCoords = getCenterOfCountry(usPath);