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

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

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

最后找到了osmdroid,经过一段时间的研究,发现使用osmdroid的还是少数,教程不多.

最后偶尔的一个机会看到了虎虎之王的博客

https://blog.csdn.net/xiaolaohuqwer/article/details/71583651

就打算从这下手了.再次感谢虎虎之王.

中途还有一些博主的文章被参阅,可惜没有记下具体链接,望海涵.


在原作者的基础上,我修改了图源,用于加载谷歌的卫星图,并且在第一次加载的时候,自动缓存本地,既能在二次加载减少加载时间,又能节省流量,毕竟是手机使用.流量能省则省

上主要代码:

/**
     * 加载在线瓦片数据
     */
    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);
    }

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

https://www.cnblogs.com/henkun010/p/6605554.html

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

最终保存图片的代码!

    /**
     * 保存文件
     */
    public void saveFile(final Bitmap bm, final String fileName,final String fileDirName)  throws IOException {
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    if(bm != null) {
                        File dirFile = new File(ALBUM_PATH + fileDirName);
                        if(!dirFile.exists()){
                            dirFile.mkdir();
                        }
                        File myCaptureFile = new File(ALBUM_PATH + fileDirName + fileName);
                        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(myCaptureFile));
                        bm.compress(Bitmap.CompressFormat.JPEG, 80, bos);
                        bos.flush();
                        bos.close();
                    }

                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }).start();
    }


demo下载地址:

https://download.csdn.net/download/zfcomfort/10447822

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: 高德地图瓦片工具.rar是一种用于切割高德地图瓦片的工具。高德地图是一款集地浏览、路线规划、导航引导等功能于一体的移动应用程序,而瓦片是指将大型地切割成小块的片,方便加载和显示。 这个切工具是以.rar格式打包的,需要解压缩后才能使用。它能够将高德地图切割成瓦片,这些瓦片是按照一定的规则和级别切割的,可以根据需要选择不同的切片级别,以满足不同的应用需求。 使用这个工具,用户可以自定义瓦片切割的参数,如地级别、切片坐标范围、输出格式等等。通过设定这些参数,可以将大型的高德地图切割成小块的瓦片,方便在应用程序中加载和使用。 这个切工具的使用方法可能会有一定的学习成本,但一旦熟悉了操作步骤,就可以快速地切割出所需的瓦片。这样,开发者就可以利用这些瓦片来构建自己的地应用、导航应用,或者进行其他地相关的开发工作。 总的来说,高德地图瓦片工具.rar是一款用于切割高德地图瓦片的工具,通过它可以将大型地切割成小块的瓦片,以便在应用程序中使用。使用它需要一定的学习成本,但一旦掌握了使用方法,就能够快速地进行地切割工作。 ### 回答2: 高德地图瓦片工具.rar是一种用于将高德地图数据切割成小块的软件工具。瓦片是一种将地数据分割成一张张小片的技术,可以提高地加载速度和显示效果。 高德地图瓦片工具.rar可以将高德地图数据按照一定的规则划分成瓦片,并保存为片格式,方便在网页或移动应用上显示。通过切割成小块的方式,可以减小地数据的大小,并且根据用户的需求加载相应的瓦片,从而提高地加载速度和显示效果。 使用高德地图瓦片工具.rar,用户可以自定义切的参数,如瓦片的大小、格式和样式等。用户也可以选择特定的地区域进行切,以满足不同项目的需求。 高德地图瓦片工具.rar的使用非常简单,用户只需将地数据导入工具中,选择合适的切参数,点击切按钮即可。切完毕后,用户可以保存切割后的瓦片,并将其集成到自己的项目中进行展示。 总之,高德地图瓦片工具.rar是一款功能强大且易于使用的软件工具,能够帮助用户将高德地图数据切割成小块,以实现快速加载和优化地显示效果的目的。 ### 回答3: 高德地图瓦片工具.rar是一个压缩文件,其中包含了高德地图所提供的瓦片工具。瓦片工具是一种用于将地数据切割成小块瓦片的工具。 瓦片工具的作用是将整张地分割成多个小区域瓦片,并将每个瓦片以相应的编号和坐标进行命名。这样,当用户需要查看特定区域的地时,只需加载对应的瓦片资源,可以大大提高地数据加载速度和效率。 高德地图瓦片工具.rar文件中可能包含了瓦片工具的程序文件、配置文件以及相关的文档。用户需要解压缩这个压缩文件,然后根据提供的说明文档,配置瓦片工具的参数,如地范围、瓦片大小等。接下来,用户可以运行瓦片工具,它会根据配置的参数自动将地数据切割成多个瓦片,并生成对应的编号和坐标。 最后,用户可以将生成的瓦片资源用于自己的地应用或网站上。当用户需要展示特定区域的地时,只需加载相应的瓦片资源,就能够快速显示出地,并且可以进行缩放和拖动等操作。 总的来说,高德地图瓦片工具.rar是一种用于切割地数据瓦片资源的工具,可以提高地数据加载速度和效率,方便用户在自己的应用或网站上展示地

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值