gpt4 book ai didi

javascript - 谷歌地图 API : Refresh ImageMapType Overlay

转载 作者:行者123 更新时间:2023-12-02 15:43:49 25 4
gpt4 key购买 nike

我正在使用 Google Maps JavaScript API 从图 block 服务器显示天气。磁贴服务器可在此处找到:http://mesonet.agron.iastate.edu/ogc/

我使用 ImageMapType 显示该图 block 服务器并将其添加到 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分钟刷新一次天气叠加层。

图 block 服务器显示当前天气数据,并且该天气数据每 5 分钟更新一次。我希望我的天气数据能够自动刷新以始终显示当前天气。

我尝试调用 google.maps.event.trigger(map, 'resize'); 来告诉 map 重新绘制自身(查看 JavaScript 中的最后一行),但是实际上并没有重新获取图 block - 它只是重新绘制已经获取的图 block 。

我可以删除该图层,重新创建它,然后再次添加它,但这会导致在没有天气显示时出现令人烦恼的情况。

我的下一个想法是在背景中创建另一个天气层,然后从第一层淡入第二层,但这似乎有点矫枉过正。

没有一个简单的ImageMapType.refetchTiles()函数吗?

最佳答案

问题是触发调整大小事件不会强制加载新图 block 。(当您查看网络时,您会发现没有任何内容被加载)

更改缩放比例将加载新图 block :

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);
}

但是,无论您尝试什么,在没有显示天气的情况下导致令人烦恼的一秒钟将始终是您的问题,因为需要一些时间才能加载图 block 。

关于javascript - 谷歌地图 API : Refresh ImageMapType Overlay,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32377591/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com