有誰知道在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