【发布时间】:2015-09-03 13:51:54
【问题描述】:
我正在使用 Google Maps JavaScript API 来显示来自磁贴服务器的天气。瓦片服务器在此处可用:http://mesonet.agron.iastate.edu/ogc/
我正在使用 ImageMapType 显示该图块服务器并将其添加到 Google 地图的 overlayMapTypes:
<!DOCTYPE html>
<html>
<head>
<title>Map Test</title>
<style type="text/css">
html, body { height: 100%; margin: 0; padding: 0; }
#map {
width:90%;
height: 90%;
display:inline-block;
}
</style>
</head>
<body>
<div id="map"></div>
<script type="text/javascript">
var map;
function initMap() {
var mapOptions = {
zoom: 8,
center: new google.maps.LatLng(42.5, -95.5),
mapTypeId: google.maps.MapTypeId.ROADMAP
};
map = new google.maps.Map(document.getElementById('map'), mapOptions);
var tileNEX = new google.maps.ImageMapType({
getTileUrl: function(tile, zoom) {
return "http://mesonet.agron.iastate.edu/cache/tile.py/1.0.0/nexrad-n0q-900913/" + zoom + "/" + tile.x + "/" + tile.y +".png?"+ (new Date()).getTime();
},
tileSize: new google.maps.Size(256, 256),
opacity:0.60,
name : 'NEXRAD',
isPng: true
});
map.overlayMapTypes.setAt("0",tileNEX);
setInterval(function (){console.log("resize"); google.maps.event.trigger(map, 'resize');}, 60000);
}
</script>
<script async defer src="https://maps.googleapis.com/maps/api/js?callback=initMap">
</script>
</body>
</html>
这很好用(将其复制到 index.html 并用浏览器打开查看),但现在我想每 X 分钟刷新一次天气叠加层。
磁贴服务器显示当前天气数据,并且该天气数据每 5 分钟更新一次。我希望我的天气数据自动刷新以始终显示当前天气。
我尝试调用google.maps.event.trigger(map, 'resize'); 来告诉地图自己重新绘制(查看我的 JavaScript 中的最后一行),但这实际上并没有重新获取图块 - 它只是重新绘制它已经获取的图块.
我可以删除图层,重新创建它,然后再次添加它,但是当没有显示天气时,这会导致令人讨厌的一秒。
我的下一个想法是在背景中创建另一个天气层,然后从第一层淡入到第二层,但这似乎有点过头了。
没有简单的ImageMapType.refetchTiles()函数吗?
【问题讨论】:
标签: javascript google-maps google-maps-api-3