Java를 사용한 Google Earth 이미지의 KMZ 압축
-
22-07-2019 - |
문제
이미지가 저장된 KMZ 파일을 만들기 위해 Java에서 어떤 압축을 사용할 것인지 아는 사람이 있습니까? 표준 Java 압축 (및 다양한 모드, Best_compression, default_compression 등)을 사용해 보았지만 압축 파일과 KMZ 파일은 항상 Google 어스에서 약간 다르지 않습니다. 특히 내 PNG 이미지처럼 보입니다 (실제 KML 파일은 같은 방식으로 압축하는 것 같습니다).
Google 어스 외부에서 로컬 이미지에 링크하고 파일 디렉토리에 저장되는 KMZ 아카이브를 성공적으로 만든 사람이 있습니까?
감사해요
제프
해결책
이를 이해하는 열쇠는 @fraser의 답변입니다. @fraser는 KML 개발자 지원 의이 스 니펫에서 지원합니다.
지원되는 유일한 압축 방법은 zip (pkzip-compatible)이므로 GZIP 나 BZIP는 작동하지 않습니다. 이 방법으로 압축 된 KMZ 파일은 API에서 완전히 지원됩니다.
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을 사용하여 생성됩니다.