所以,我在过去做了一些样品KML / KMZ文件,主要是由手,已经发现了几个矛盾与谷歌地球作为这项工作的结果。 在大多数情况下,我认为我有一个很好的手柄上有什么需要我为GE的特定版本做的。 最近,我尝试了一些自动化添加到我的KML / KMZ样本文件对其进行定制基于点和其他元数据给定的CSV某些客户端。
我想伸手去有经验者从Java创建KMZ文件自定义图标或内容。 这里是我卡在皱纹:
我创建,由专人,一堆的风格和自定义图标来更好地显示客户数据。 最近,我创建了一个Java应用程序,让我通过自动化KML / KMZ生产,以节省时间很大。 这些样式是(在其应有的位置与逃逸)从例子中直接复制到我的Java代码。 Java代码初步建成KML,然后我打包KML从我的例子中,压缩并保存为KMZ的图标文件夹中。 所有工作的罚款。
然后我说主要是基于一个代码块这个例子中 ,并加入我的所有图标作为资源的罐子。 然后,我建立了文件的.zip和验证了KML和图标文件(在适当的文件夹)都在压缩。 他们是。 所有很高兴与世界同步。
然后我改变了输出文件名.KMZ而不是.zip或试图运行在谷歌的输出。 我的自定义图标没有被加载。 该KML工作正常,点和面都没有用适当的风格色彩,但也有在中间与X的箱子,如果它不能访问的图标。
如果我重新命名输出KMZ来压缩,解压并运行KML里面,按预期工作的一切。 如果我重新压缩,并重新命名为KMZ,它再次被打破。
这里是真正的乐趣,虽然。 如果我参加了KML出KMZ的,重新包装与图标从资源文件夹从我的工作区,保存为KMZ和加载到谷歌地球,它的工作原理确定。
我觉得好像是在告诉我,我的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++){
//Previously wrote kml file, time to read it in and add to zip
if (i == 0){
FileInputStream fin = new FileInoutStream(fileOut);
zout.putNextEntry(new ZipEntry(fileOut.getName());
int length;
while ((length = fin.read(buffer)) > 0){
zout.write(buffer,0,length);
}
zout.closeEntry();
fin.close();
}
//Read in resource icon files and add to zip
else{
InputStream inStream = this.getClass().getResourceAsStream(resourceFiles[i]);
zout.putNextEntry(new ZipEntry(resourceFiles[i]));
int length;
while((length = inStream.read(buffer)) > 0){
zout.write(buffer,0,length);
}
zout.closeEntry();
inStream.close();
}
}
zout.flush();
zout.close();
foutstream.close();
fileOut.delete(); //Deletes previously made KML file