Вопрос

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

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

Спасибо

Джефф

Это было полезно?

Решение

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

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

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

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

Другие советы

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 если ты хочешь.

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

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

В Застежка - молния вы можете указать либо СОХРАНЕННЫЙ или СДУТЫЙ метод сжатия, оба из которых совместимы с Google Планета Земля.

  • Примечание какую бы библиотеку ZIP или API вы ни использовали, вы должны обязательно указать ZIP 2.0 или "устаревшие" методы сжатия (т. Е. сохраненные методы и методы DEFLATE), если только они не являются методами по умолчанию.Метод DEFLATE называется сверхбыстрым, а метод STORED вызывается Нет или 'Отсутствие сжатия" в Документация WinZip.
  • Максимальный или улучшенное сдувание метод часто отображается с коротким названием "Дефл: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();

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top