Question

Quelqu'un sait-il quelle compression utiliser en Java pour créer des fichiers KMZ contenant des images? J'ai essayé d'utiliser la compression Java standard (et divers modes, BEST_COMPRESSION, DEFAULT_COMPRESSION, etc.), mais mon fichier compressé et le fichier kmz sont toujours légèrement différents, mais ne se chargent pas dans Google Earth. Il semble que mes images png en particulier (le fichier kml semble être compressé de la même manière).

Quelqu'un at-il créé avec succès une archive kmz reliée à des images locales (et stockée dans le répertoire des fichiers) en dehors de Google Earth?

merci

Jeff

Était-ce utile?

La solution

La clé pour comprendre cela est la réponse de @fraser, qui est prise en charge par cet extrait de support du support développeur KML:

  

La seule méthode de compression prise en charge est ZIP (compatible PKZIP).   ni gzip ni bzip ne fonctionneraient. Fichiers KMZ compressés avec cette   méthode sont entièrement pris en charge par l'API.

     

API KMZ dans Google Earth & amp; Compression KML dans un environnement Unix

Apache Commons possède une bibliothèque de traitement des archives qui serait pratique pour cela: http: //commons.apache.org/proper/commons-vfs/filesystems.html

Autres conseils

KMZ est simplement un fichier zip avec un fichier KML et des ressources. Par exemple, le fichier london_eye.kmz kmz contient:

   $ 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

Vous pouvez le construire avec java.util.zip, ou même avec jar si vous le souhaitez.

En ce qui concerne les images, elles ne doivent pas être compressées, car elles contiennent déjà des données compressées. Vous n'obtenez aucune économie significative.

Par défaut, le ZipOutputStream en Java créera un fichier KMZ compatible que Google Earth pourra lire.

Dans le ZipEntry , vous pouvez spécifier la méthode de compression STORED ou DEFLATED , toutes deux compatibles avec Google Earth.

  • Notez que quelle que soit la bibliothèque ZIP ou l'API que vous utilisez, vous devez vous assurer de spécifier ZIP 2.0 ou "héritage" méthodes de compression (c'est-à-dire, méthodes STORED et DEFLATE) sauf s'il s'agit des méthodes par défaut. La méthode DEFLATE est appelée SuperFast et STORED, Aucun ou ' Aucune compression ' dans Documentation WinZip .
  • La méthode
  • ou Enhanced Deflate est souvent affichée avec le nom abrégé " Defl: X ". est également pris en charge dans Google Earth.
  • Les méthodes de compression plus avancées (par exemple, bzip2, LZMA, etc.) sont NON compatibles avec Google Earth et ces fichiers KMZ seront automatiquement ignorés s'ils sont ouverts.

Voici un extrait de code simple permettant de créer un fichier KMZ en Java.

  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();

Bien sûr, j'ai des fichiers de package Kmz avec des images en c #. Autant que je sache, la seule méthode de compression prise en charge est ZIP (compatible PKZIP). Quelle bibliothèque en Java utilisez-vous?

Il existe une bibliothèque pour traiter le KML en Java appelée JAK (API Java pour KML).

Malheureusement, il semble y avoir un bogue: Problème 1: enregistrer Le fichier KMZ ne fonctionne pas . Vous n’êtes donc pas le premier à avoir des problèmes pour générer un fichier KMZ ...

Comme l’a dit Simsong, KMZ est simplement compressé en KML. Une chose que j’ai remarquée, c’est que doc.kml doit être la première entrée du fichier zip pour fonctionner de manière fiable. Je ne me rappelle pas avoir fait quelque chose de spécial avec les images (mis à part mettre tout sauf doc.kml dans un sous-répertoire). Mes fichiers KMZ sont générés à l'aide de java.util.zip.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top