function getPath(poly) { var points = poly.getAttribute("points").trim().split(" "); if (points.length < 6) throw "degenerate polygon"; if (points.length % 2 !== 0) throw "odd number of points"; var d = "M " + points[0] + " " + points[1]; for (var i = 1; i < (points.length / 2); ++i) { d = d + " L " + points[i*2] + " " + points[i*2+1]; } return d + " Z"; } function joinPolys() { var ps = document.querySelectorAll("polygon"); for (var i = 0; i < ps.length; ++i) { var poly = ps[i]; var style = poly.getAttribute("style"); var path = document.createElementNS("http://www.w3.org/2000/svg", "path"); path.setAttribute("style", style); poly.parentNode.insertBefore(path, poly); var d = getPath(poly); poly.parentNode.removeChild(poly); for (var j = i + 1; j < ps.length; ++j) { var nextPoly = ps[j]; if (nextPoly.getAttribute("style") !== style) break; d = d + " " + getPath(nextPoly); nextPoly.parentNode.removeChild(nextPoly); } path.setAttribute("d", d); i = j - 1; } } joinPolys();