Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/422.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 获取SVG路径和VML的中心_Javascript_Jquery_Html_Svg_Vml - Fatal编程技术网

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);