KMZ-Kompression für Google Earth Bilder mit Java
-
22-07-2019 - |
Frage
Wer weiß, was Kompression in Java zu verwenden, für die Erstellung von KMZ-Dateien, die Bilder in ihnen gespeichert haben? Ich habe versucht, Standard-Java-Komprimierung (und verschiedene Modi, BEST_COMPRESSION, DEFAULT_COMPRESSION, usw.), aber meine komprimierte Datei und die KMZ-Datei immer kommen etwas andere nicht in Google Earth laden. Es scheint, wie meine PNG-Bilder in bestimmten (die tatsächliche KML-Datei scheint die gleiche Art und Weise zu komprimieren).
Hat jemand erfolgreich ein KMZ-Archiv erstellt, die auf lokale Bilder verbinden (und wird im Dateiverzeichnis gespeichert) von außerhalb von Google Earth?
Dank
Jeff
Lösung
Der Schlüssel dies zu verstehen, ist die Antwort von @fraser, die durch diesen Ausschnitt aus KML Developer Support unterstützt:
Das einzige unterstützte Komprimierungsverfahren ist ZIP (PKZIP-kompatibel), so weder gzip noch bzip funktionieren würde. KMZ-Dateien mit diesem Druck Verfahren werden vollständig durch die API unterstützt.
KMZ in Google Earth API & KML Kompression in einer Unix-Umgebung
Apache Commons hat eine Archivbibliothek Umgang mit der für diese wäre praktisch: http: //commons.apache.org/proper/commons-vfs/filesystems.html
Andere Tipps
KMZ ist einfach eine Zip-Datei mit einer KML-Datei und Vermögen. Zum Beispiel kann die london_eye.kmz
KMZ-Datei enthält:
$ 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
Sie können diese bauen mit java.util.zip oder sogar mit jar
wenn Sie möchten.
Was die Bilder gehen, sollten sie nicht komprimiert werden, da sie bereits komprimierte Daten enthält. Sie haben noch keine signifikanten Einsparungen bekommen.
Standardmäßig wird die ZipOutputStream Klasse in Java wird eine kompatible KMZ-Datei, dass Google Earth erstellen lesen kann.
Im ZipEntry Sie können entweder angeben STORED oder entleerten Kompressionsverfahren, von denen beide sind kompatibel mit Google Earth.
- Hinweis je nachdem, welche ZIP-Bibliothek oder API Sie verwenden möchten, müssen Sie sicherstellen, dass ZIP angeben 2,0 oder „Legacy“ Kompressionsverfahren (das heißt, Lagerungs- und DEFLATE Methoden), es sei denn diese sind die Standardmethoden. DEFLATE Methode wird Superfast genannt und Stored heißt Keine oder ' Keine Komprimierung ' in WinZip Dokumentation .
- Maximum oder verbesserte deflate Methode oft mit dem Kurznamen angezeigt " Defl: X ". Wird auch in Google Earth unterstützt
- Fortgeschrittenere Kompressionsverfahren (zum Beispiel bzip2, LZMA, etc.) nicht kompatibel mit Google Earth und solchen KMZ-Dateien werden still, wenn geöffnet ignoriert werden.
Hier ist einfach Code-Schnipsel eine KMZ-Datei in Java zu erstellen.
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();
Sicher, ich habe Paket KMZ-Dateien mit Bildern in c #. AFAIK die einzigen Kompressionsverfahren, die unterstützt wird, ist ZIP (PKZIP-kompatibel). Welche Bibliothek in Java verwenden Sie?
Es gibt eine Bibliothek für mit KML in Java zu tun namens JAK (Java API für KML).
Leider scheint es einen Fehler zu haben: Problem 1: speichern KMZ-Datei funktioniert nicht - so sieht es aus wie Sie nicht der erste sind, die Probleme mit der Erzeugung eine KMZ-Datei hat ...
Wie simsong gesagt wird KMZ einfach gezippte KML. Eine Sache, die ich habe bemerkt, dass doc.kml den ersten Eintrag in der Zip-Datei sein muss für sie zuverlässig zu arbeiten. Ich erinnere mich nicht etwas zu tun besonderen mit den Bildern (außer in einem Unterverzeichnis alles aber doc.kml setzen). Meine KMZ-Dateien werden mit java.util.zip erzeugt wird.