показ изображения в точке в kmz

Я создал файл KMZ с помощью приведенной ниже программы. В моем проекте maven я создал папку с именем files в папке проекта, я добавил изображение с именем grn-pushpin.png в папку с файлами.

В моей программе при создании KMZ я передал свое изображение, как показано ниже.

FileInputStream  is = new FileInputStream("files/grn-pushpin.png");
ZipEntry zEnt = new ZipEntry("files/grn-pushpin.png"); 

При показе изображения точки в KML я дал ps.println("<Icon><href>files/grn-pushpin.png</href></Icon>"); Теперь он показывает изображение, но кажется, что оно показывается только из локальной папки.

Как я могу убедиться, что изображение исходит из файла KMZ?

import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
import org.apache.commons.io.IOUtils;
import java.io.*;

public class TestKmz {

    public static void main(String[] args) throws IOException {     
        createKMZ();
        System.out.println("file out.kmz created");
    }

    public static void createKMZ()  throws IOException  {
        FileOutputStream fos = new FileOutputStream("out.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("<Placemark>");
        // add reference to image via inline style
        ps.println("  <Style><IconStyle>");
        ps.println("    <Icon><href>files/grn-pushpin.png</href></Icon>");
        ps.println("  </IconStyle></Style>");
        ps.println(" <Point><coordinates>72.877460,19.144808</coordinates></Point> ");
        ps.println("</Placemark>");
        ps.println("</kml>");
        ps.flush();                 
        zoS.closeEntry(); // close KML entry

        // now add image file entry to KMZ
        FileInputStream is = null;
        try {                   
            is = new FileInputStream("files/grn-pushpin.png");
            ZipEntry zEnt = new ZipEntry("files/grn-pushpin.png");
            zoS.putNextEntry(zEnt);
            // copy image input to KMZ output
            // write contents to entry within compressed KMZ file
            IOUtils.copy(is, zoS);
        } finally {
            IOUtils.closeQuietly(is);
        }
        zoS.closeEntry();
        zoS.close();
    }   
}   

Я удалил следующие строки кода, но я все равно вижу изображение, это означает, что оно загружается только из папки, а не читается из файла KMZ.

 is = new FileInputStream("files/grn-pushpin.png");
 ZipEntry zEnt = new ZipEntry("files/grn-pushpin.png");

person JavaDev    schedule 09.06.2020    source источник
comment
GE Pro сначала будет искать файлы внутри KMZ и использовать их, если они доступны, в противном случае эти файлы будут искаться в локальной файловой системе относительно файла KMZ по тому же пути (например, files/grn-pushpin.png). Переместите файл KMZ в другую папку, чтобы убедиться, что изображения внутри KMZ используются.   -  person JasonM1    schedule 09.06.2020
comment
@JasonM1 спасибо за ответ, он берет изображения только с КМЗ...   -  person JavaDev    schedule 10.06.2020


Ответы (1)


Google Планета Земля Про (GEP) сначала ищет файлы, указанные как относительные URI (например, files/grn-pushpin.png) внутри файла KMZ, и использует их, если они доступны.

Если ссылка на изображение не найдена как запись в файле KMZ, GEP будет искать эти файлы в локальной файловой системе относительно файла KMZ, используя тот же путь, поэтому, если файл kmz out.kmz находится в C:/path/data/, он будет искать изображение относительно этой папки в C:/path/data/files/grn-pushpin.png.

Чтобы убедиться, что указанные файлы внутри KMZ загружаются, переместите файл out.kmz в другую папку (например, на рабочий стол) и откройте его в Google Планета Земля.

person JasonM1    schedule 10.06.2020