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

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top