在google maps Android API中使用google maps离线地图(缓存)



Google Maps在几个月内提供下载特定地理区域以供以后离线使用的功能。我在我的应用程序中使用了Google Maps Android API,我发现在离线时,与真正的Google Maps应用程序相比,我无法在我的应用程序中完全放大街道水平,因此下载的数据可能没有使用。

是否有办法让我的应用程序使用它?

您需要创建自己的TileProvider并在本地访问tile。查看此文档

这里有一些相关的线程可以帮助你:

  • 使用android谷歌地图API v2作为离线瓷砖的查看器:是可能的吗?
  • android应用程序使用谷歌地图api的离线模式
  • TileProvider使用本地瓷砖

查看这个视频教程关于缓存和这个例子从GitHub。

你也可以使用osmdroid,它是Android的MapView类的替代品。它还包括一个模块化的瓷砖提供程序系统,支持许多在线和离线的瓷砖源,并支持内置的覆盖,用于绘制图标、跟踪位置和绘制形状。这是教程。

org.osmdroid.views.MapView mapView = (org.osmdroid.views.MapView) findViewById(R.id.map_view); //resolve the map view by id given in the layout
mapView.setTileSource(new OnlineTileSourceBase("Google Maps", ResourceProxy.string.unknown, 1, 20, 256, ".png", "http://mt3.google.com/vt/v=w2.97") {   
    @Override
    public String getTileURLString(final MapTile aTile) {
        /*
         * GOOGLE MAPS URL looks like
         *  base url        const   x   y    zoom
         * http://mt3.google.com/vt/v=w2.97&x=74327&y=50500&z=17
         */
        return getBaseUrl() + "&x=" + aTile.getX() + "&y=" + aTile.getY() + "&z=" + aTile.getZoomLevel();
    }
});
mapView.setUseDataConnection(false); //this actually makes the controller use only offline tiles

希望这对你有帮助!

最新更新