문제

이미지가 저장된 KMZ 파일을 만들기 위해 Java에서 어떤 압축을 사용할 것인지 아는 사람이 있습니까? 표준 Java 압축 (및 다양한 모드, Best_compression, default_compression 등)을 사용해 보았지만 압축 파일과 KMZ 파일은 항상 Google 어스에서 약간 다르지 않습니다. 특히 내 PNG 이미지처럼 보입니다 (실제 KML 파일은 같은 방식으로 압축하는 것 같습니다).

Google 어스 외부에서 로컬 이미지에 링크하고 파일 디렉토리에 저장되는 KMZ 아카이브를 성공적으로 만든 사람이 있습니까?

감사해요

제프

도움이 되었습니까?

해결책

이를 이해하는 열쇠는 @fraser의 답변입니다. @fraser는 KML 개발자 지원 의이 스 니펫에서 지원합니다.

지원되는 유일한 압축 방법은 zip (pkzip-compatible)이므로 GZIP 나 BZIP는 작동하지 않습니다. 이 방법으로 압축 된 KMZ 파일은 API에서 완전히 지원됩니다.

Unix 환경에서 Google Earth API 및 KML 압축의 KMZ

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 당신은 둘 중 하나를 지정할 수 있습니다 저장 또는 수축 압축 방법은 둘 다 Google 어스와 호환됩니다.

  • 사용하는 Zip 라이브러리 또는 API를 사용하는 경우 기본 메소드가 아닌 한 Zip 2.0 또는 "Legacy"압축 메소드 (즉, 저장 및 디플레이트 메소드)를 지정해야합니다. Deflate 메소드는 Superfast라고하며 저장된 저장됩니다 없음 또는 '압축이 없습니다' 안에 Winzip 문서.
  • 최대 또는 향상된 디플레이트 종종 짧은 이름으로 표시되는 방법 "defl : x"Google 어스에서도 지원됩니다.
  • 보다 고급 압축 방법 (예 : BZIP2, LZMA 등)은 다음과 같습니다. 아니다 Google 어스와 호환되며 이러한 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 파일이 있습니다. AFAIK 지원되는 유일한 압축 방법은 ZIP (PKZIP 호환)입니다. Java의 어떤 라이브러리를 사용하고 있습니까?

Java에서 KML을 다루기위한 도서관이 있습니다. Jak (KML의 경우 Java API).

불행히도 버그가있는 것 같습니다. 문제 1 : KMZ 저장 파일은 작동하지 않습니다 - 그래서 KMZ 파일을 생성하는 데 문제가있는 첫 번째 사람이 아닌 것 같습니다 ...

Simsong이 말했듯이 KMZ는 단순히 KML을 향한 것입니다. 내가 알아 차린 한 가지는 Doc.kml이 ZIP 파일의 첫 번째 항목이어야한다는 것입니다. 나는 이미지로 특별한 일을하는 것을 기억하지 못한다 (doc.kml을 제외한 모든 것을 하위 디렉토리에 넣는 것 외에). 내 kmz 파일은 java.util.zip을 사용하여 생성됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top