首页 > 解决方案 > 如何在仅包含地标文件夹的 KML/KMZ 文件中使用 NetworkLink refreshMode?

问题描述

我有一堆地标组织成文件夹,然后压缩成一个 KMZ 文件。我使用 Google Maps JavaScript API 将 KMZ 文件显示为地图覆盖,但大约每周一次覆盖消失。我相信这是由于缓存过期。我已经阅读了一些关于 NetworkLink 和 refreshMode ( https://developers.google.com/kml/documentation/kmlreference#Link ) 的内容,但我对如何针对我的具体情况实施这一点感到困惑。

当我解压 KMZ 文件时,里面唯一的文件是 doc.kml,它看起来像这样:

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2" xmlns:kml="http://www.opengis.net/kml/2.2" xmlns:atom="http://www.w3.org/2005/Atom">
<Document>
    <name>My Document</name>
<StyleMap> A BUNCH OF STYLES, not sure why all of these exist </StyleMap>
<Folder>
        <name>My Folder</name>
        <open>1</open>
        <Folder>
            <name>My Subfolder</name>
            <Placemark>
                <description><![CDATA[<br><br><br>
    <table border="1" padding="0">
      <tr><td>cableid</td><td>1</td></tr>
      <tr><td>spanid</td><td>1076</td></tr>]]></description>
                <styleUrl>#m_ylw-pushpin</styleUrl>
                <LineString>
                    <extrude>1</extrude>
                    <tessellate>1</tessellate>
                    <coordinates>
                        -79.86184,40.349647,0 -79.861864,40.350147,0 -79.860741,40.350056,0 
                    </coordinates>
                </LineString>
            </Placemark>
            <Placemark>
               ... etc
            </Placemark>
    </Folder>
</Folder>
</Document>
</kml>

它确实包含多个文档和嵌套文件夹。不确定这是否重要。

我是否需要自行将 doc.kml 上传到服务器,然后使用引用 doc.kml 的 NetworkLink 创建一个单独的 KML 文件?我不会失去 KMZ 压缩的好处吗?还有其他想法吗?

标签: google-mapsgoogle-maps-api-3kmlkmz

解决方案


如果您开始创建自己的 KML 并在 Google Maps JavaScript APi 中显示它,您可以参考此文档

该文档还指出,在 Internet 上公开托管 KML 文件是所有将 KML 加载到 KMLLayer 中的应用程序的要求,以便 Google 的服务器可以找到并检索内容以将其显示在地图上。仅当 KML 文件托管在不需要身份验证即可访问的可公开访问的 URL 上时,才能显示它们。

如果您需要访问私有文件、对缓存进行细粒度控制或将浏览器视口作为查询参数发送到地理空间数据服务器,建议使用 数据层而不是 KmlLayer。这将引导您的用户浏览器直接从您的 Web 服务器请求资源。

您还可以参考 Google Maps Platform 的此文档,其中讨论了性能和缓存注意事项以及获得最佳性能的建议提示。


推荐阅读