我有一些动态生成的KML文件,我想在Google地图上显示。这很简单,我之前做了几次,没问题。
我想要的是KML文件只能由Google为请求缓存。也就是说,如果一个人访问带有Google地图嵌入的页面,其中已加载并显示了我的KML,我希望该KML文件用于该页面加载。但是如果用户要刷新页面(具有相同的Google地图URL),我希望重新获取KML文件。
简单"只需添加一个时间戳参数"不起作用,因为我无法控制在页面上传递给谷歌地图的网址(只是大部分网址)。
查看<Link>
和<networkLink>
标记,它们似乎可让您控制外部资源上的过期,缓存,刷新等。阅读文档,似乎使用<refreshMode>onChange<refreshMode>
使用双层方法将获得我想要的东西。
经过测试,Google即使在10-20分钟后重新加载了多个地图(当我向地图搜索框提供相同的网址时),也无法刷新链接的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替换为正确的内容。有没有人知道我可能做错了什么?或者如果我想要的可能吗?
答案 0 :(得分:1)
这就是我所知道的:
onChange
将完全缓存响应,除非您通过<viewFormat>
对KML加载启用视口直通,我几个小时后才看到任何刷新。onExpire
在链接的KML文件中使用'max-age'
标题在Google地图中不起作用(根据文档),尽管我看到了[1]中描述的行为,这可能是相关的到默认的内部Google地图过期时间。onExpire
使用<NetworkLinkControl>
和<expires>
排序工作,因为数据似乎在提供的到期时间后过期,但行为看起来更接近[ 1] onInterval
将刷新数据,假设您的<viewRefreshTime>
足够大,并且会按照自己的时间表执行(时间不是最可靠),但地图视图开始缩小完全(似乎没有办法解决这个问题)。 [1]如果您指定'max-age'
X秒并且您打开页面,则在页面具有焦点时,KML将永远不会刷新。如果您将焦点移动到另一个网页或应用程序,然后等待一段时间后页面应该刷新(有时等待2分钟就足够了,有时候不是),然后你回到页面,它可能会弥补快速连续30次请求,如果您不返回内容,则尝试刷新数据;如果您确实返回内容,则只刷新一次。
长话短说:使用onExpire
和onInterval
对Google地图中的KML文件进行缓存控制根本不可靠。在加载数据后的某个时刻,它将被刷新,因为谷歌的缓存已经摆脱它。但是什么时候缓存过期了?一些随机时间至少需要5分钟。
答案 1 :(得分:1)
对于到期日期,Google会遵循标头中的过期时间,但会强制执行至少5分钟的到期时间,以防止第三方服务器受到有效拒绝服务攻击的攻击。</ p>