在好例子网,分享、交流、成长!
您当前所在位置:首页Java 开发实例Android平台开发 → Android的关于高德地图加载谷歌瓦片,并缓存本地的功能.

Android的关于高德地图加载谷歌瓦片,并缓存本地的功能.

Android平台开发

下载此实例
  • 开发语言:Java
  • 实例大小:25.87M
  • 下载次数:9
  • 浏览次数:153
  • 发布时间:2021-05-28
  • 实例类别:Android平台开发
  • 发 布 人:zfcomfort
  • 文件格式:.rar
  • 所需积分:2
 相关标签: Android 地图加载 and 缓存 高德

实例介绍

【实例简介】


最近开发的Android的App需要使用到卫星图,不过发现国内现有的百度,高德的卫星图对郊区图层支持的不好,只能使用谷歌的卫星图.

在尝试使用谷歌的Google Map API for Android后又发现去要手机安装谷歌服务,并且有可能用到科学上网.所以就想有没有一个既能加载谷歌卫星图的,又不需要安装谷歌服务.

最后找到了高德地图用于加载谷歌的卫星图,并且在第一次加载的时候,自动缓存本地,既能在二次加载减少加载时间,又能节省流量,毕竟是手机使用.流量能省则省


【实例截图】


【核心代码】

/**
     * 加载在线瓦片数据
     */
    private void useOMCMap() {
        final String url =  "http://www.google.cn/maps/vt?lyrs=y&gl=cn&x=%d&s=&y=%d&z=%d";
        //final String url =  "http://mt1.google.cn/vt/lyrs=y&hl=zh-CN&gl=cn&x=%d&s=&y=%d&z=%d";

        TileOverlayOptions tileOverlayOptions =
                new TileOverlayOptions().tileProvider(new UrlTileProvider(256, 256) {
                    @Override
                    public URL getTileUrl(int x, int y, int zoom) {
                        try {
                            //return new URL(String.format(url, zoom   1, TileXYToQuadKey(x, y, zoom)));
                            //return new URL(String.format(url, x, y, zoom));
                            String mFileDirName;
                            String mFileName;
                            mFileDirName = String.format("L%02d/", zoom   1);
                            mFileName = String.format("%s", TileXYToQuadKey(x, y, zoom));//为了不在手机的图片中显示,下载的图片取消jpg后缀,文件名自己定义,写入和读取一致即可,由于有自己的bingmap图源服务,所以此处我用的bingmap的文件名
                            String LJ = ALBUM_PATH  mFileDirName  mFileName;
                            if (MapImageCache.getInstance().isBitmapExit( mFileDirName   mFileName)) {//判断本地是否有图片文件,如果有返回本地url,如果没有,缓存到本地并返回googleurl
                                return new URL("file://"   LJ);
                            } else {
                                String filePath = String.format(url, x, y, zoom);
                                Bitmap mBitmap;
                                //mBitmap = BitmapFactory.decodeStream(getImageStream(filePath));//不知什么原因导致有大量的图片存在坏图,所以重写InputStream写到byte数组方法
                                mBitmap = getImageBitmap(getImageStream(filePath));
                                try {
                                    saveFile(mBitmap, mFileName, mFileDirName);
                                } catch (IOException e) {
                                    e.printStackTrace();
                                }
                                return new URL(filePath);
                            }
                        }catch (Exception e) {
                            e.printStackTrace();
                        }
                        return null;
                    }
                });
        tileOverlayOptions.diskCacheEnabled(false)   //由于高德自带的瓦片缓存在关闭程序后会自动清空,所以无意义,关闭本地缓存
                .diskCacheDir("/storage/emulated/0/amap/OMCcache")
                .diskCacheSize(1024000)
                .memoryCacheEnabled(true)
                .memCacheSize(102400)
                .zIndex(-9999);
        mtileOverlay = aMap.addTileOverlay(tileOverlayOptions);
    }

瓦片数据下载途中发现会有图片出现黑块,格式损坏的问题,参考了下面进行解决

public Bitmap getImageBitmap(InputStream imputStream){
        // 将所有InputStream写到byte数组当中
        byte[] targetData = null;
        byte[] bytePart = new byte[4096];
        while (true) {
            try {
                int readLength = imputStream.read(bytePart);
                if (readLength == -1) {
                    break;
                } else {
                    byte[] temp = new byte[readLength (targetData == null ? 0 : targetData.length)];
                    if (targetData != null) {
                        System.arraycopy(targetData, 0, temp, 0, targetData.length);
                        System.arraycopy(bytePart, 0, temp, targetData.length, readLength);
                    } else {
                        System.arraycopy(bytePart, 0, temp, 0, readLength);
                    }
                    targetData = temp;
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        // 指使Bitmap通过byte数组获取数据
        Bitmap bitmap = BitmapFactory.decodeByteArray(targetData, 0, targetData.length);
        return bitmap;
    }


实例下载地址

Android的关于高德地图加载谷歌瓦片,并缓存本地的功能.

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
;
报警