我在带有KMZ叠加层的HTML页面中创建了一个Google地图,并且显示正确。然后,我尝试使用网络链接显示KML文件,以便定期刷新,因为KML文件内容中的数据可能会发生变化。然而,这不起作用。
Google Map和KML(可行)的HTML代码部分如下所示(我刚刚输入了一个假网址)。
<script>
function initMap() {
var windhoek = {lat: -22.8, lng: 17.6};
var map = new google.maps.Map(document.getElementById('map'), {
zoom: 4.5,
center: windhoek
});
var ctaLayer = new google.maps.KmlLayer({
url: 'http://www.example.com/kml_file_ovelay.kmz',
map: map
});
}
</script>
<script async defer
src="https://maps.googleapis.com/maps/api/js?key=&callback=initMap">
</script>
然后我创建了一个引用此kml_file_ovelay.kmz文件的网络链接文件(network_link_file.kmz)。
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://earth.google.com/kml/2.1">
<NetworkLink>
<Link>
<href>http://www.example.com.na/kml_file_ovelay.kmz</href>
<refreshMode>onInterval</refreshMode>
<refreshInterval>30</refreshInterval>
</Link>
</NetworkLink>
</kml>
我已使用Google地球打开此文件,它可以正常运行。
HTML文件已更改为引用网络链接文件,如下所示。
<script>
function initMap() {
var windhoek = {lat: -22.8, lng: 17.6};
var map = new google.maps.Map(document.getElementById('map'), {
zoom: 4.5,
center: windhoek
});
var ctaLayer = new google.maps.KmlLayer({
url: 'http://www.example.com/network_link_file.kmz',
map: map
});
}
</script>
<script async defer
src="https://maps.googleapis.com/maps/api/js?key=&callback=initMap">
</script>
现在,谷歌地图仍然出现,但KMZ叠加层从未出现过。我尝试过不同的浏览器,看看它是否可能是一个缓存问题。它在Google Maps API文档(https://developers.google.com/maps/documentation/javascript/kmllayer)中说明Google地图支持网络链接动态导入数据,所以我必须做错事,我假设在我的network_link_file.kmz文件中。
有谁知道可能导致这种情况的原因?我对这个问题的搜索没有发现在这种情况下可能出现什么问题。
任何帮助都将不胜感激。
--- BarryHunter提供的答案---
我在https://support.google.com上发布了同样的问题。 BarryHunter的帖子提供了答案(感谢Barry!)。 Javascript还可用于强制刷新,如下所示。
var ctaLayer = false;
function refreshLayer() {
if (ctaLayer)
ctaLayer.setMap(null);
ctaLayer = new google.maps.KmlLayer({
url: 'http://www.example.com/kml_file_overlay.kmz?r=' + (new Date()).getTime(),
map: map
});
}
setInterval(refreshLayer, 10000);
使用这种方法,甚至不需要网络链接文件。希望这有助于其他人!