所以,我过去已经制作了一些样本KML/KMZ文件,主要是手工制作,并且由于这项工作发现了一些与Google Earth 不一致的内容.在大多数情况下,我认为我能够很好地处理特定版本的GE需要做的事情.最近,我尝试在KML/KMZ示例文件中添加一些自动化,以根据给定的点和其他元数据CSV为某些客户端自定义它们.
我想与具有使用自定义图标或内容从Java创建KMZ文件的经验的人联系.这是我坚持的皱纹:
我手工创建了一堆样式和自定义图标,以更好地显示客户端数据.最近,我创建了一个Java应用程序,通过自动化KML/KMZ生成,我可以节省大量时间.这些样式直接从示例复制到我的Java代码中(在合法的位置有转义).Java代码最初构建了KML,然后我用我的示例中的icons文件夹打包了KML,压缩并保存为KMZ.一切正常.
然后我在很大程度上基于这个例子添加了一个代码块,并将我的所有图标作为资源添加到jar中.然后我将文件构建为.zip并验证KML和Icon文件(在适当的文件夹中)是否在zip中.他们是.所有人都对世界感到满意.
然后我将输出文件名更改为.kmz而不是.zip,并尝试在Google中运行输出.我的自定义图标都没有加载.KML工作得很好,点和多边形都有适当的样式颜色,但是中间有X的盒子,好像它不能访问图标一样.
如果我将输出KMZ重命名为zip,解压缩并在其中运行KML,一切都按预期工作.如果我重新剪辑并重命名为KMZ,它又会被打破.
这是真正的乐趣.如果我将KML从KMZ中取出,使用来自我工作区的资源中的icons文件夹重新打包,保存为KMZ并加载到google earth中,它可以正常工作.
我觉得这样告诉我,我的java.util.zip代码以某种方式破坏了图像,以至于GE不知道如何处理它们.但是我完全混淆了为什么它们在打包时工作正常,但是当从同一位置重新包装时再次破坏.
有人有主意吗?不要发布代码,请提前道歉.如果我们可以稍微缩小问题空间,我会发布我能做的.
这是我现在可以转录的代码:
//Create new file output based on file-name of previously made KML file (fileOut)
//nameToken exists to pop KML extension off the back end of fileOut.getName()
File fileOut2 = new File(fileOut.getParent(), nameToken2[0] + ".kmz");
FileOutputStream foutstream = new FileOutputStream(fileOut2);
ZipOutputStream zout = new ZipOutputStream(foutstream);
byte[] buffer = new byte[1024];
String[] resourceFiles = {null,"/icons/b-lv.png",...}; //many files listed here
for(int i = 0; i < resourceFiles.length; i++){ …Run Code Online (Sandbox Code Playgroud)