Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.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
Java 到KML多边形的SVG路径_Java_Svg_Kml_Converters - Fatal编程技术网

Java 到KML多边形的SVG路径

Java 到KML多边形的SVG路径,java,svg,kml,converters,Java,Svg,Kml,Converters,我想用Java创建一个svg到kml的转换器。我为这项任务创建了一种转换器,它接收svg格式的文本,并以kml格式打印文本。到目前为止,我能够处理圆形和矩形标记。我无法处理路径 如何读取svg路径(d属性)并在kml中重建它们 主要问题源于这样一个事实,即svg路径不是简单的坐标序列,其中包含曲线。下面是我需要处理的svg路径输入示例: <html> <body> <svg width="10000" height="1000"> <path id="

我想用Java创建一个svg到kml的转换器。我为这项任务创建了一种转换器,它接收svg格式的文本,并以kml格式打印文本。到目前为止,我能够处理圆形矩形标记。我无法处理路径

如何读取svg路径(d属性)并在kml中重建它们

主要问题源于这样一个事实,即svg路径不是简单的坐标序列,其中包含曲线。下面是我需要处理的svg路径输入示例:

<html>
<body>

<svg width="10000" height="1000">
<path id="square" fill="#0000FF" 
d="M351.3,251 l-3.1-2.2c-0.3-0.2-0.3-0.5-0.1-0.8l2.2-3.1c0.2-0.3,0.5-0.3,0.8-0.1l3.1,2.2
c0.3,0.2,0.3,0.5,0.1,0.8l-2.2,3.1C355,251.1,354.6,251.2,354.3,251z"/>

</body>
</html>

如果我能弄清楚如何计算d属性中的字符串,那么唯一的另一个问题就是如何使用从d属性中的字符串中提取的值创建曲线


这种路径格式不是常见的在线路径格式;它是由其他人使用adobe illustrator创建的,现在我无法访问该软件。由于没有空格或常规逗号,我无法理解如何正确读取字符串。

我找到了一种在JavaScript中将SVG路径转换为SVG多边形的简单方法。SVG多边形可以很容易地转换为KML placemarks,因为两者都使用坐标列表。此脚本可以放置在HTML文件中,并将直接在浏览器上运行。它将从您的计算机中获取一个SVG文件,并将修改后的文件保存为文本文件。我建议使用Chrome,因为SVG在其上保持固定大小,这确保坐标系保持完全相同


读取器
到多边形的SVG路径

document.getElementById(“文件阅读器”).addEventListener('change',function(){ var fr=new FileReader(); fr.onload=函数(){; var d=new DOMParser().parseFromString(this.result.toString(),“image/svg+xml”); var nodelist=d.querySelectorAll('path'); log(“路径数:“+nodelist.length”); forEach(function(path){//这将使用多边形替换每个路径,保持相同的id。 var polygon=d.createElements(“http://www.w3.org/2000/svg“,”多边形“); polygon.setAttribute(“id”,path.getAttribute(“id”); log(“转换”+path.getAttribute(“id”); var length=path.getTotalLength(); var p=path.getPointAtLength(0); var stp=p.x+“,”+p.y;
对于(var i=1;iI无法使用现有转换器,因为我正在处理的某些事情是我的项目所独有的。有人可以再次激活此问题吗?我已经完全更改了它,包括输入的详细信息和一个特定问题。我只需要帮助评估路径的d属性中的值。KML不支持曲线,它只有y直线几何。但这可以通过在曲线上有很多点来解决,这样它看起来像一条曲线,而实际上它是许多直线段。我对圆做过这项工作,我使用64个点均匀地分布在圆周上,以获得一个非常好看的圆。我不太确定如何对贝塞尔c做这项工作这就是我对圆所做的(我传递一个点,它是一个具有x和y双值的对象;它是我创建的一个类;在本例中它是圆的中心):
for(int I=0;I<64;I++){output.println((center.x+r*Math.cos)(Math.toRadians(5.625*I))+,“+(center.y+r*Math.sin(Math.toRadians(5.625*I)))} /Cord>这是C++中的解析器。Mozilla在某个地方也有一个生锈,如果你在Batik找到它,java中会有一个。