Android 保存谷歌地图供脱机使用

Android 保存谷歌地图供脱机使用,android,google-maps,Android,Google Maps,我正在谷歌地图上做一个项目。我的要求是在线保存谷歌地图,并在离线模式下使用。在Ios中,他们使用GMStillEurlConstructor。同样,是否存在保存地图的可能性。如果是,你能提供我任何想法或链接 -(void)ViewOfflineMap { GMSTileURLConstructor urls = ^(NSUInteger x, NSUInteger y, NSUInteger zoom) { NSString *s

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

    -(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_;
    }

提前感谢。

谷歌地图已经完成了这项工作,您所看到的内容将被缓存在以下位置:

8.1定义

(b) “内容”是指通过服务提供的任何内容(无论 由谷歌或其第三方许可方创建),包括地图和 地形数据、摄影图像、交通数据、地点数据 (包括业务列表)或任何其他内容

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

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

。。。为提高性能而限制的内容量


回答您的问题:不,您不能保存谷歌地图数据供脱机使用。

我有一个解决方案。我们可以使用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));
TileProvider TileProvider=新的UrlTileProvider(256,256){
@凌驾
公共URL getTileUrl(int x,int y,int zoom){
String s=String.format(
"http://my.image.server/images/%d%d%d.png,缩放,x,y);
如果(!checkTileExists(x,y,zoom)){
返回null;
}
试一试{
返回新的URL;
}捕获(格式错误){
抛出新断言错误(e);
}
}
私有布尔checkTileExists(整数x、整数y、整数缩放){
int minZoom=12;
int maxZoom=16;
如果((缩放<最小缩放| |缩放>最大缩放)){
返回false;
}
返回true;
}
};
tileOverlay=map.addTileOverlay(新TILEOVERLAYONS()
.tileProvider(tileProvider));

这必须是一条注释,在我的应用程序中,我使用地图来绘制我需要的位置。我需要在离线状态下使用绘制的位置。但这在IOS应用程序和谷歌地图中也是可能的。那为什么我们不能呢?