1 回答

TA貢獻(xiàn)1772條經(jīng)驗 獲得超8個贊
我找到了一種在 JavaScript 中將 SVG 路徑轉(zhuǎn)換為 SVG 多邊形的簡單方法。SVG 多邊形可以輕松轉(zhuǎn)換為 KML 地標(biāo),因為兩者都使用坐標(biāo)列表。這個腳本可以放在一個 HTML 文件中,并且可以直接在瀏覽器上運行。它將從您的計算機獲取 SVG 文件并將修改后的文件保存為文本文件。我建議使用 Chrome,因為 SVG 在其上保持固定大小,從而確保坐標(biāo)系保持完全相同。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Reader</title>
</head>
<body>
<h1>SVG paths to polygons</h1>
<input type="file" id="fileReader" />
<br>
<p id="Content"></p>
<script>
document.getElementById("fileReader").addEventListener('change',function(){
var fr = new FileReader();
fr.onload = function(){;
var d = new DOMParser().parseFromString( this.result.toString(), "image/svg+xml" );
var nodelist = d.querySelectorAll('path');
console.log("Number of paths: " + nodelist.length);
nodelist.forEach(function(path){//This replaces each path with a polygon, keeping the same id.
var polygon = d.createElementNS("http://www.w3.org/2000/svg", "polygon");
polygon.setAttribute("id", path.getAttribute("id"));
console.log("Converting " + path.getAttribute("id"));
var length = path.getTotalLength();
var p=path.getPointAtLength(0);
var stp=p.x+","+p.y;
for(var i=1; i<length; i++){
p=path.getPointAtLength(i);
stp=stp+" "+p.x+","+p.y;
//This places points along the path at one unit distance apart.
}
polygon.setAttribute("points", stp);
path.replaceWith(polygon);
});
var text1 = new XMLSerializer().serializeToString(d);
document.write(text1);
function download(filename, text) {
var element = document.createElement('a');
element.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text));
element.setAttribute('download', filename);
element.style.display = 'none';
document.body.appendChild(element);
element.click();
document.body.removeChild(element);
}
// Starting file download.
download("output.txt", text1);
}
fr.readAsText(this.files[0]);
})
</script>
</body>
</html>
然后您可以直接獲取該points屬性并將其放置在 KML 中的坐標(biāo)標(biāo)記中。您只需要用新行替換空格。
添加回答
舉報