谷歌地图API:刷新ImageMapType覆盖
Google Maps API: Refresh ImageMapType Overlay
我使用Google Maps JavaScript API来显示来自tile服务器的天气。贴片服务器可以在这里找到:http://mesonet.agron.iastate.edu/ogc/
我正在使用ImageMapType
显示tile服务器并将其添加到Google Map的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()
函数吗?
问题是触发resize-event并不会强制加载新的tile。(当您查看网络时,您将看到没有加载任何内容)
改变缩放将加载新的贴图:
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 if zoom is not an integer
if(zoom%1)return null;
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 (){
//this will change the zoom of the map
map.setZoom(map.getZoom()+.000000000000001);
//this will change the zoom again and load fresh tiles
map.setZoom(Math.round(map.getZoom()));
}, 60000);
}
但是,不管你怎么尝试,这个:当没有显示天气时,会导致令人讨厌的第二秒将永远是你的问题,因为它需要一些时间来加载瓷砖
相关文章:
- 在循环中分配json值时,值被覆盖
- 谷歌地图固定位置覆盖
- 只覆盖箭头键滚动事件
- JQuery覆盖不更改单选选项
- 如何覆盖锚点元素's href目标,并在我点击转到目标javascript时删除其他错误
- 将添加一个相同类型的事件附加或覆盖以前添加的具有相同名称的事件
- 传单中如何在更改基层时启用/禁用覆盖层
- 点击(右键点击)使用传单地图库获取图像覆盖的像素坐标
- HTML/CSS-用于拖放的全页面覆盖
- 让javascript知道epub3电子书中何时播放媒体覆盖
- 覆盖函数中的函数
- 无法覆盖CSS伪元素:before
- 如何覆盖原型中的事件侦听器
- 覆盖在赢得'不允许点击下面的标记,谷歌地图api v3
- 如何覆盖主干中的extend方法
- jQuery无法处理覆盖
- qoxdoo的代码覆盖工具
- 像createComment这样的各种自定义变量名在内联javascript中被覆盖,但在外部js中没有.为什么?
- javascript函数将数据添加到屏幕,但随后被另一个函数覆盖
- 谷歌地图API:刷新ImageMapType覆盖