質問

画像が格納されたKMZファイルを作成するためにJavaで使用する圧縮を知っている人はいますか?標準のJava圧縮(およびさまざまなモード、BEST_COMPRESSION、DEFAULT_COMPRESSIONなど)を使用してみましたが、圧縮ファイルとkmzファイルは、Google Earthでロードしないと、常にわずかに異なって出力されます。特に私のpng画像のようです(実際のkmlファイルは同じように圧縮されているようです)。

Google Earthの外部からローカル画像にリンクするkmzアーカイブを作成した(およびファイルディレクトリに保存する)誰かが成功しましたか?

ありがとう

ジェフ

役に立ちましたか?

解決

これを理解する鍵は、@ fraserからの回答です。これは、KML開発者サポートの次のスニペットでサポートされています。

  

サポートされている圧縮方式はZIP(PKZIP互換)のみであるため、   gzipもbzipも機能しません。これで圧縮されたKMZファイル   メソッドはAPIによって完全にサポートされています。

     

Google Earth APIのKMZ& Unix環境でのKML圧縮

Apache Commonsには、これに便利なアーカイブ処理ライブラリがあります: http: //commons.apache.org/proper/commons-vfs/filesystems.html

他のヒント

KMZは、KMLファイルとアセットを含む単なるzipファイルです。たとえば、 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 でビルドできます。

画像は、圧縮されたデータがすでに含まれているため、圧縮しないでください。大幅な節約はありません。

デフォルトでは、 ZipOutputStream Javaの クラスは、Google Earthが読み取れる互換性のあるKMZファイルを作成します。

ZipEntry では、 STORED または DEFLATED の圧縮方法を指定できます。どちらもGoogle Earthと互換性があります。

  • 使用するZIPライブラリまたはAPIに注意して、ZIPを指定する必要があります。 2.0または「レガシー」これらがデフォルトのメソッドでない限り、圧縮メソッド(つまり、STOREDおよびDEFLATEメソッド) DEFLATEメソッドはSuperFastと呼ばれ、STOREDはNone または ' No Compression 'と呼ばれます.htm "rel =" nofollow noreferrer "> WinZipドキュメント。
  • Maximumまたは enhanced deflate メソッドは、多くの場合、短い名前" Defl:X "とともに表示されます。 Google Earthでもサポートされています。
  • より高度な圧縮方法(例:bzip2、LZMAなど)はGoogle Earthと互換性がないため、このようなKMZファイルは開かれても無視されます。

JavaでKMZファイルを作成する簡単なコードスニペットです。

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

もちろん、c#で画像を含むKmzファイルをパッケージ化しています。知っている限り、サポートされている圧縮方法はZIP(PKZIP互換)のみです。 Javaのどのライブラリを使用していますか

JAK (Java APIと呼ばれるJavaのKMLを処理するためのライブラリがあります。 KML)。

残念ながら、バグがあるようです:問題1:保存KMZファイルは機能しません-KMZファイルの生成に問題があるのはあなたが初めてではないようです...

simsongが言ったように、KMZは単純に圧縮されたKMLです。気づいたことの1つは、doc.kmlが確実に機能するためにはzipファイルの最初のエントリである必要があるということです。 (doc.kml以外のすべてをサブディレクトリに置くことを除いて)画像で特別なことをしたことを思い出しません。 KMZファイルはjava.util.zipを使用して生成されます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top