首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在kmz点显示图像

在kmz点显示图像
EN

Stack Overflow用户
提问于 2020-06-09 05:08:54
回答 1查看 103关注 0票数 0

我使用下面的程序创建了一个KMZ文件,在我的maven项目中,我在项目文件夹下创建了一个名为files的文件夹,在文件文件夹中添加了一个名为grn-pushpin.png的图像。

在我的程序中,在创建KMZ时,我传递了如下所示的图像

代码语言:javascript
代码运行次数:0
运行
复制
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文件?

代码语言:javascript
代码运行次数:0
运行
复制
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文件中读取的

代码语言:javascript
代码运行次数:0
运行
复制
 is = new FileInputStream("files/grn-pushpin.png");
 ZipEntry zEnt = new ZipEntry("files/grn-pushpin.png");
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-10 19:44:32

Google (GEP)首先查找KMZ文件中作为相对URI引用的文件(例如,file /grn-pupin.png),如果可用的话使用它。

如果在KMZ文件中找不到图像引用作为条目,则GEP将使用相同的路径在本地文件系统中查找相对于KMZ文件的那些文件,因此如果kmz文件out.kmz位于C:/path/data/中,那么它将查找相对于C:/path/data/files/grn-pushpin.png中该文件夹的图像。

要验证KMZ中的引用文件是否正在加载,请将out.kmz文件移动到另一个文件夹(例如桌面),并在Google中打开它。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62275429

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档