保存谷歌地图以供离线使用

时间:2014-09-12 12:52:58

标签: android google-maps

我正在谷歌地图上做一个项目。我的要求是在线时保存Google地图并在离线模式下使用。在Ios中,他们使用了GMSTileURLConstructor。同样,是否存在保存地图的可能性。如果是的话,您可以向我提供任何想法或链接。

    -(void)ViewOfflineMap
    {
          GMSTileURLConstructor urls = ^(NSUInteger x, NSUInteger y, NSUInteger zoom) {
               NSString *strMap=[NSString      stringWithFormat:@"http://mt0.google.com/vt/x=%ld&y=%ld&z=%ld",(long)x,(long)y,(long)zoom];
               return [NSURL URLWithString:strMap];
          };

    GMSURLTileLayer *layer=[GMSURLTileLayer tileLayerWithURLConstructor:urls];
    layer.zIndex=100;
    layer.map=mapView_;
    }

提前致谢。

3 个答案:

答案 0 :(得分:2)

我有一个解决方案。我们可以使用UrlTileProvider将地图保存为图块。它会根据屏幕中的缩放级别以及x和y轴覆盖区域保存地图图块。

TileProvider tileProvider = new UrlTileProvider(256, 256) {
    @Override
    public URL getTileUrl(int x, int y, int zoom) {

        String s = String.format(
                "http://my.image.server/images/%d%d%d.png", zoom, x, y);

        if (!checkTileExists(x, y, zoom)) {
            return null;
        }

        try {
            return new URL(s);
        } catch (MalformedURLException e) {
            throw new AssertionError(e);
        }
    }

    private boolean checkTileExists(int x, int y, int zoom) {
        int minZoom = 12;
        int maxZoom = 16;

        if ((zoom < minZoom || zoom > maxZoom)) {
            return false;
        }

        return true;

    }
};

tileOverlay = map.addTileOverlay(new TileOverlayOptions()
        .tileProvider(tileProvider));

答案 1 :(得分:0)

谷歌地图已经完成了,您看到的内容将被缓存

答案 2 :(得分:0)

来自Google Maps Terms of Service

  

8.1定义。

     

(b)“ 内容 ”指通过本服务提供的任何内容(是否   由Google或其第三方许可人创建),包括地图和   地形数据,摄影图像,交通数据,地点数据   (包括商家信息)或任何其他内容。

     

10.1.3数据导出或复制的限制。

     

(b) 内容的预取,缓存或存储 。你不能   预取,缓存或存储任何内容,但您可以存储:...

     

......为改善表现而限制的内容......

要回答您的问题:不,您可能无法保存Google地图数据以供离线使用。