Сжатие kmz для изображений Google Earth с Java - PullRequest
4 голосов
/ 05 августа 2009

Кто-нибудь знает, какое сжатие использовать в Java для создания файлов KMZ, в которых хранятся изображения? Я пытался использовать стандартное сжатие Java (и различные режимы, BEST_COMPRESSION, DEFAULT_COMPRESSION и т. Д.), Но мой сжатый файл и файл kmz всегда немного отличаются, не загружаются в Google Earth. Похоже, что мои изображения PNG в частности (кажется, что фактический файл kml сжимается так же).

Кто-нибудь успешно создал архив kmz, который ссылается на локальные изображения (и хранится в каталоге файлов) за пределами Google Планета Земля?

спасибо

Jeff

Ответы [ 6 ]

1 голос
/ 09 января 2014

Ключом к пониманию этого является ответ @fraser, который поддерживается этим фрагментом из KML Developer Support:

Единственный поддерживаемый метод сжатия - ZIP (совместимый с PKZIP), поэтому ни gzip, ни bzip не будут работать. KMZ файлы сжаты с этим Метод полностью поддерживается API.

KMZ в Google Earth API и сжатие KML в среде Unix

Apache Commons имеет библиотеку обработки архива, которая была бы удобна для этого: http://commons.apache.org/proper/commons-vfs/filesystems.html

1 голос
/ 16 марта 2013

По умолчанию класс ZipOutputStream в Java создаст совместимый файл KMZ, который может прочитать Google Планета Земля.

В ZipEntry вы можете указать STORED или DEFLATED метод сжатия, оба из которых совместимы с Google Earth.

  • Обратите внимание, какую бы библиотеку ZIP или API вы не использовали, вы должны обязательно указать ZIP 2.0 или "устаревшие" методы сжатия (т.е. методы STORED и DEFLATE), если только они не являются методами по умолчанию. Метод DEFLATE называется SuperFast, а STORED называется Нет или ' Без сжатия ' в документации WinZip .
  • Максимальный или улучшенный метод дефляции , часто отображаемый с коротким именем " Defl: X ", также поддерживается в Google Планета Земля.
  • Более продвинутые методы сжатия (например, bzip2, LZMA и т. Д.) НЕ совместимы с Google Планета Земля, и такие файлы KMZ будут автоматически игнорироваться при открытии.

Вот простой фрагмент кода для создания файла KMZ в 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();
1 голос
/ 31 августа 2009

KMZ - это просто zip-файл с KML-файлом и ресурсами. Например, файл 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, если хотите.

Что касается изображений, они не должны быть сжаты, поскольку они уже содержат сжатые данные. Вы не получаете значительной экономии.

0 голосов
/ 05 сентября 2009

Как сказал simsong, KMZ - это просто KML на молнии. Одна вещь, которую я заметил, это то, что doc.kml должен быть первой записью в zip-файле, чтобы он работал надежно. Я не помню, чтобы я делал что-то особенное с изображениями (кроме размещения всего, кроме doc.kml в подкаталоге). Мои KMZ-файлы создаются с использованием java.util.zip.

0 голосов
/ 04 сентября 2009

Существует библиотека для работы с KML в Java, которая называется JAK (Java API для KML).

К сожалению, похоже, есть ошибка: Проблема 1: сохранение файла KMZ не работает - похоже, вы не первый, у кого проблемы с генерацией файла KMZ ...

0 голосов
/ 28 августа 2009

Конечно, у меня есть пакет Kmz файлов с изображениями в c #. AFAIK единственный поддерживаемый метод сжатия - это ZIP (PKZIP-совместимый). Какую библиотеку в Java вы используете?

...