Google地图上的网络链接

时间:2018-03-16 13:31:11

标签: javascript google-maps kml google-api-client kmz

我在带有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);

使用这种方法,甚至不需要网络链接文件。希望这有助于其他人!

0 个答案:

没有答案