有谁知道在Java中使用什么压缩来创建KMZ文件,其中存储图像?我尝试过使用标准的Java压缩(以及各种模式,BEST_COMPRESSION,DEFAULT_COMPRESSION等),但是我的压缩文件和kmz文件总是出现稍微不同的不加载的谷歌地球。看起来像我的PNG图像(实际的kml文件似乎以相同的方式压缩)。kmz压缩谷歌地球图像与java
有没有人成功地创建了一个kmz存档,链接到本地图像(并存储在文件目录中)从谷歌之外的地球?
感谢
杰夫
有谁知道在Java中使用什么压缩来创建KMZ文件,其中存储图像?我尝试过使用标准的Java压缩(以及各种模式,BEST_COMPRESSION,DEFAULT_COMPRESSION等),但是我的压缩文件和kmz文件总是出现稍微不同的不加载的谷歌地球。看起来像我的PNG图像(实际的kml文件似乎以相同的方式压缩)。kmz压缩谷歌地球图像与java
有没有人成功地创建了一个kmz存档,链接到本地图像(并存储在文件目录中)从谷歌之外的地球?
感谢
杰夫
理解这个的关键是从@fraser答案,这是由该片段从KML开发人员支持支持:
唯一支持的压缩方法是ZIP(PKZIP兼容),所以 既不gzip也不bzip会工作。使用此 方法压缩的KMZ文件完全受API支持。
KMZ in Google Earth API & KML Compression in a Unix environment
阿帕奇百科全书具有归档处理库这将是得心应手的:http://commons.apache.org/proper/commons-vfs/filesystems.html
当然,我有在c#图像包KMZ文件。 AFAIK唯一支持的压缩方法是ZIP(PKZIP兼容)。你在用什么Java库?
KMZ只是一个包含KML文件和资产的zip文件。例如,london_eye.kmz
KMZ文件包含:
$ unzip -l london_eye.kmz
Archive: london_eye.kmz
Length Date Time Name
-------- ---- ---- ----
451823 09-27-07 08:47 doc.kml
0 09-26-07 07:39 files/
1796 12-31-79 00:00 files/Blue_Tile.JPG
186227 12-31-79 00:00 files/Legs.dae
3960 12-31-79 00:00 files/Olive.JPG
1662074 12-31-79 00:00 files/Wheel.dae
65993 12-31-79 00:00 files/Wooden_Fence.jpg
7598 12-31-79 00:00 files/a0.gif
7596 12-31-79 00:00 files/a1.gif
7556 12-31-79 00:00 files/a10.gif
7569 12-31-79 00:00 files/a11.gif
7615 12-31-79 00:00 files/a12.gif
7587 12-31-79 00:00 files/a13.gif
7565 12-31-79 00:00 files/a14.gif
7603 12-31-79 00:00 files/a15.gif
7599 12-31-79 00:00 files/a16.gif
7581 12-31-79 00:00 files/a17.gif
7606 12-31-79 00:00 files/a18.gif
7613 12-31-79 00:00 files/a19.gif
7607 12-31-79 00:00 files/a2.gif
7592 12-31-79 00:00 files/a3.gif
7615 12-31-79 00:00 files/a4.gif
7618 12-31-79 00:00 files/a5.gif
7618 12-31-79 00:00 files/a6.gif
7578 12-31-79 00:00 files/a7.gif
7609 12-31-79 00:00 files/a8.gif
7603 12-31-79 00:00 files/a9.gif
57185 12-31-79 00:00 files/capsule.dae
310590 12-31-79 00:00 files/groundoverlay.jpg
224927 12-31-79 00:00 files/mechanism.dae
160728 12-31-79 00:00 files/shadowoverlay.jpg
33044 12-31-79 00:00 files/shed.dae
-------- -------
3310275 32 files
你可以用java.util.zip建立这个,甚至与jar
如果你想。
就图像而言,它们不应该被压缩,因为它们已经包含压缩数据。你没有得到任何显着的节省。
你实际上做到了这一点java.util.zip?当我这样做时,我仍然无法让Google Earth打开它?我注意到这些压缩与将文件放入谷歌地球时略有不同。 – 2009-09-08 00:23:37
有一个用于处理Java中KML的库,名为JAK(用于KML的Java API)。
不幸的是,它似乎有一个bug:Issue 1: save KMZ file does not work - 所以看起来你不是第一个谁拥有生成KMZ文件的问题...
谢谢。我一直无法获得kmz压缩以使用标准java压缩。你会认为这会更容易。 – 2009-09-08 00:22:35
正如simsong说,KMZ仅仅是压缩的KML 。我注意到的一件事是,doc.kml需要成为zip文件中的第一个条目才能可靠地工作。我不记得对图像做了什么特别的事情(除了将doc.kml以外的所有东西都放在子目录中)。我的KMZ文件是使用java.util.zip生成的。
默认情况下,ZipOutputStream Java中的类将创建Google地球可以读取的兼容KMZ文件。
在ZipEntry您可以指定存储的或DEFLATED压缩方法,这两者都与谷歌地球兼容。
下面是使用Java创建KMZ文件的简单代码片段。
FileOutputStream fos = new FileOutputStream("example.kmz");
ZipOutputStream zoS = new ZipOutputStream(fos);
ZipEntry ze = new ZipEntry("doc.kml");
zoS.putNextEntry(ze);
PrintStream ps = new PrintStream(zoS);
ps.println("<?xml version='1.0' encoding='UTF-8'?>");
ps.println("<kml xmlns='http://www.opengis.net/kml/2.2'>");
// write out contents of KML file ...
ps.println("<Document>");
ps.println("<Placemark>");
// ...
ps.println("</Placemark>");
ps.println("</Document>");
ps.println("</kml>");
ps.flush();
zoS.closeEntry(); // close KML entry
// include and write other files (E.g. icons, overlays, other KML files, etc.)
zoS.close();
我只是用标准的Java类邮编... – 2009-08-31 01:22:47