谷歌地图imageMapType崩溃iOS野生动物园

时间:2014-09-29 12:19:06

标签: javascript ios google-maps-api-3 mobile-safari

我正在将自定义png磁贴加载到谷歌地图上,似乎性能在iOS Safari中杀死了应用程序,并使其与大多数其他浏览器一起爬行。我认为这是由于加载到地图上的图块数量(加载73个伊利诺伊州,图块编号取决于缩放级别)以及iOS为Safari提供的内存量有限。

首先,我只为我拥有的图块创建一个新的imageMapType覆盖图,并且我没有尝试使用google.maps.LatLngBounds.intersects

为屏幕上的每个图块检索图像。
        function createBoundedTileLayer(sourceUrl, bounds) {
        var imageMapType = new google.maps.ImageMapType({
            getTileUrl: function (coord, zoom) {
                var tileBounds = getTileBounds(coord, zoom);
                if (bounds.intersects(tileBounds)) {
                    return app.stringFormat(sourceUrl, coord.x, coord.y, zoom);
                }
                return null;
            },
            tileSize: new google.maps.Size(256, 256),
            isPng: true,
            opacity: 0.7
        });
        return imageMapType;
    }

    function getTileBounds(coord, zoom) {
        var mapSize = Math.pow(2, zoom);
        var west = ((coord.x * 360) / mapSize) - 180;
        var east = (((coord.x + 1) * 360) / mapSize) - 180;

        var efactor = Math.exp((0.5 - coord.y / mapSize) * 4 * Math.PI);
        var north = (Math.asin((efactor - 1) / (efactor + 1))) * (180 / Math.PI);

        efactor = Math.exp((0.5 - (coord.y + 1) / mapSize) * 4 * Math.PI);
        var south = (Math.asin((efactor - 1) / (efactor +1))) * (180/Math.PI);

        return new google.maps.LatLngBounds(new google.maps.LatLng(south, west), new google.maps.LatLng(north, east));
    }

其次,我是一个"桌面"浏览器,我同时加载所有瓷砖,它不会崩溃(只是在我缩放或平移地图时爬行)。对于移动浏览器,要停止崩溃行为,我一次只为5个县加载足够的磁贴,使用setTimeout 2000毫秒,然后在循环中加载5个县,直到所有73个县都被加载。

有没有人在谷歌地图上遇到过这个问题? 提前谢谢!

1 个答案:

答案 0 :(得分:0)

@xmux部分就在这里。虽然他建议谷歌地图引擎让服务器渲染图块,这可能也解决了这个问题,但他对用于javascript虚拟机的RAM量的评论是真正的解决方案。

这73个县正在加载到地图上的73个图层中。显然,对于内存量有限的设备,这将无法工作。我们最终解决此问题的方法是在用户放大到足以读取自定义图层(> 12)的内容之前不显示此自定义图层。然后,只获取恰好适合此视口的县。在获得自定义图层之前,将此缩放设置为高,最多可将5个图层添加到地图中。

为了更好的内存管理,在显示叠加层之前,缩放级别更高可能会减少到更少的图层。

此外,在缩小或平移后,请自行清理。除非你告诉他们离开,否则这些叠加将永远留在地图上。

故事的道德 - 考虑内存管理和自己清理。谢谢,@ xmux!