gpt4 book ai didi

google-maps - kml 文件和谷歌地图的缓存过期

转载 作者:行者123 更新时间:2023-12-02 06:02:44 29 4
gpt4 key购买 nike

我有一些动态生成的 KML 文件,我想将其显示在 Google map 上。这是最简单的部分,我以前做过几次,没问题。

我想要的是 Google 仅针对请求缓存 KML 文件。也就是说,如果一个人访问嵌入了 Google map 的页面,其中加载并显示了我的 KML,我希望该 KML 文件用于该页面加载。但如果用户要刷新页面(具有相同的 Google map URL),我希望重新获取 KML 文件。

简单的“仅添加时间戳参数”不起作用,因为我无法控制页面上传递给 Google map 的 url(仅是大部分 url)。

查看 <Link><networkLink>标签,它们似乎可以让您控制外部资源的过期、缓存、刷新等。阅读文档,似乎使用 <refreshMode>onChange<refreshMode>使用两层方法将得到我想要的。

经过测试后,即使在 10-20 分钟和多次 map 重新加载之后(当我向 map 搜索框提供相同的网址时),Google 实际上也不会刷新链接的 KML 文件的内容。

这些是我正在使用的 KML 文件:

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<Document>
<NetworkLink>
<Link>
<href>URL</href>
<refreshMode>onChange</refreshMode>
</Link>
</NetworkLink>
</Document>
</kml>

...

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<Document>
<Placemark>
<name>NAME</name>
<visibility>1</visibility>
<Style>
STYLE
</Style>
GEOMETRY
</Placemark>
</Document>
</kml>

... 将 URL、NAME、STYLE 和 GEOMETRY 替换为正确的内容。有谁知道我可能做错了什么?或者我想要的是否可能?

最佳答案

这是我所知道的:

  • onChange将完全缓存响应,除非您通过 <viewFormat> 在 KML 加载上启用视口(viewport)直通,几个小时后我还没有看到任何刷新。
  • onExpire使用'max-age'链接的 KML 文件上的 header 在 Google map 中不起作用(根据文档),尽管我看到了 [1] 中描述的行为,这可能与默认的内部 Google map 过期时间有关。
  • onExpire使用<NetworkLinkControl><expires> sort-of 有效,因为数据似乎在提供的过期时间后过期,尽管行为看起来更接近 [1]
  • onInterval将刷新数据,假设您的 <viewRefreshTime>足够大,并且会按照自己的时间表进行(时间安排一点也不可靠),但是 map View 开始完全缩小(似乎没有办法解决这个问题)。

[1] 如果您指定 'max-age' X 秒后,如果您将页面保持打开状态,则当页面具有焦点时,KML 将永远不会刷新。如果您将焦点移至其他网页或应用程序,然后等到页面应该刷新一段时间(有时等待 2 分钟就足够了,有时则不够),然后返回该页面,这可能会弥补如果您不返回内容,则快速连续 30 个请求尝试刷新数据;如果您返回内容,则仅尝试刷新一次。

长话短说:Google map 中 KML 文件的缓存控制 onExpireonInterval根本不可靠。在加载数据后的某个时刻,它会被刷新,因为谷歌的缓存已经摆脱了它。但是这个缓存什么时候过期呢?一些至少 5 分钟后的随机时间。

关于google-maps - kml 文件和谷歌地图的缓存过期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15469292/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com