【问题标题】:Google Maps API: Refresh ImageMapType OverlayGoogle Maps API:刷新 ImageMapType 覆盖
【发布时间】: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


    【解决方案1】:

    问题是触发调整大小事件不会强制加载新图块。(当您查看网络时,您会发现什么都不会加载)

    更改缩放将加载新图块:

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

    但是,无论您尝试什么,这:在没有显示天气时会导致烦人的一秒始终是您的问题,因为这需要一些时间加载图块。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-10
      • 1970-01-01
      • 2011-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多