【问题标题】:Google Maps: Some KMZ layers disappear after many access谷歌地图:多次访问后,一些 KMZ 图层消失了
【发布时间】:2019-08-27 08:58:13
【问题描述】:

最近我正在开发一个包含压缩为 KMZ 文件(约 45mb)的 KML 图层的地图。 由于存在文件重量限制,我首先将文件拆分为 3mb 的文件。 然后我注意到一些拆分的文件每次都没有显示,导致地图上出现一些“空白”。 所以我在很多论坛上进行了研究,发现为了让一切正常工作,文件的真正限制是 2mb。 更新后,KML Layer 确实完整显示了。

但是,经过多次测试,我发现某些部分又消失了。 目前大约有一半的部分没有显示,就像它们被 Google Maps API 拒绝一样(被拒绝的部分总是相同的,而且它们没有增加,所以我认为它们是无效的)。 我再次对 Google Maps KML Layer API 和限制/验证进行了许多研究,但找不到与我的问题匹配的任何信息。

Google Maps API 没有发送错误,只是得到如下的空响应:

/**/_xdc_._swjxb2 && _xdc_._swjxb2( [0,null,null,null,null,null,4,[["client","2"]]] )

有人知道文件限制/验证的规则吗? 一个 KMZ URL 是否有访问限制?还是因为文件无效?如果是,如何检查我的文件是否有效?

这是从被拒绝的 KML 文件之一中提取的 KML:

下载地址:https://mega.nz/#!zohkmSAQ

键:!4HfbSLDpazhXHsTpFLOgfgXirRbt2usNFVy-ZYoDNcw

由于某些原因,我只删除了 . 但这是它的格式:


<![CDATA[<html xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:msxsl="urn:schemas-microsoft-com:xslt">
<head>
<META http-equiv="Content-Type" content="text/html">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
</head>
<body>
<table>
<td>NAME</td>
</tr>
<tr>
<td>
<table>
<tr>
<td>LABEL</td>
<td>VALUE</td>
</tr>
<tr>
<td>LABEL</td>
<td>VALUE</td>
</tr>
<tr>
<td>LABEL</td>
<td>VALUE</td>
</tr>
<tr>
<td>LABEL</td>
<td>VALUE</td>
</tr>
<tr>
<td>LABEL</td>
<td>VALUE</td>
</tr>
<tr>
<td>LABEL</td>
<td></td>
</tr>
<tr>
<td>LABEL</td>
<td>VALUE</td>
</tr>
<tr>
<td>LABEL</td>
<td>VALUE</td>
</tr>
</table>
</td>
</tr>
</table>
</body>
</html>]]>

我尝试将扩展名重命名为 xml 并用 Chrome 打开它以检查它是否格式正确,但它已被 Chrome 正确解析。

编辑:通过升级服务器以上传 KMZ 文件解决了问题。

【问题讨论】:

    标签: javascript google-maps kml layer invalidation


    【解决方案1】:

    KML Restrictions from the documentation

    KML 渲染的大小和复杂性限制
    Maps JavaScript API 对加载的 KML 文件的大小和复杂性有限制。以下是当前限制的摘要。

    注意:这些限制可能随时更改。

    最大提取文件大小(原始 KML、原始 GeoRSS 或压缩 KMZ)3MB
    最大未压缩 KML 文件大小 10MB
    最大网络链接数 10
    文档范围内的最大特征总数 1,000

    KML 图层数
    可以在单个 Google 地图上显示的 KML 图层数有限制。如果超出此限制,您的任何图层都不会出现在地图上,并且您的 Web 浏览器的 JavaScript 控制台中会报告错误。该限制基于创建的 KmlLayer 类的数量和用于创建这些图层的所有 URL 的总长度的组合。您创建的每个新 KmlLayer 都将占用图层限制的一部分,并根据加载 KML 文件的 URL 的长度占用另一部分限制。因此,您可以添加的层数会因应用程序而异;平均而言,您应该能够加载 10 到 20 层而不会达到限制。如果您仍然达到限制,请使用 URL 缩短器来缩短 KML URL。或者,创建单个 KML 文件,其中包含指向各个 KML URL 的 NetworkLink。

    您发布的 KML 为 5MB(超过了获取的最大文件大小)。

    Gives FETCH_ERROR

    But can be loaded with the third party library geoxml3(但这会将其转换为浏览器中的“普通”谷歌地图对象,性能可能会受到影响)

    Zipped (KMZ) still gives me a FETCH_ERROR

    still loads with geoxml3

    【讨论】:

    • 我发布的 KML 不是获取的文件,而是未压缩的 KML 文件。因此,最大为 10MB 应该没问题,不是吗?顺便说一句,未被拒绝的文件具有完全相同的权重。压缩为 KMZ 时,文件为 1.9 mb。
    • 你的意思是压缩的KMZ文件和里面包含的KML文件都应该是最大3MB?
    • 没有。 “最大未压缩 KML 文件大小”为 10MB。但如果我将发布的文件压缩到 kmz,我仍然会收到 FETCH_ERROR
    • 我明白了,问题是如果我使用 KML 文件,总大小将变为 150mb,这对于仅在地图上显示图层来说太大了...我可以拆分 KMZ 文件所以那个 KML 文件变得小于 3MB,但是我担心我会超过一个站点中要加载的 KMZ 文件数量的限制......不是吗?
    • 还有一个问题是,为什么其他文件可以工作? KML 文件也大约 5MB,但它们可以工作。我正要认为文件验证是完全随机的......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-21
    • 1970-01-01
    • 1970-01-01
    • 2011-07-04
    • 2016-08-14
    • 1970-01-01
    • 2012-12-19
    相关资源
    最近更新 更多