Просто учитывая данные SVG, предоставленные URL-адресом, в вычислительном отношении невозможно определить, какую часть США (или любую другую страну) следует рассматривать как основную / центральную часть.
Примерным решением будет подсчетНаибольшую заполняемую область в качестве основной области и рассчитать центр этой области.К сожалению, SVG API не предоставляет метода для вычисления площади.
То, что у вас осталось, - это возможность итерировать по каждому отдельному сегменту пути, вычислять их отдельные длины и реализовывать достаточно хороший алгоритм аппроксимации для нахождения центраОсновная часть.Помните, что только команды «lineto», «curveto» и «arcto» являются частью общей длины пути, которую вы можете получить, вызвав .getTotalLength()
для элемента path.
Действительно примитивный скелет кода:
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
}
}
};
Invoke like:
var usPath, usCenterCoords;
usPath = document.querySelector('#jvectormap1_us');
usCenterCoords = getCenterOfCountry(usPath);