由于天地图的地图接口请求有次数限制,我们做了本地缓存机制
原理是先查找本地目录是否有保存的瓦片图片,有的话直接返回路径,没有的话去请求天地图加载并保存到本地。
话不多说,直接上代码
我们加载在线瓦片代码是下面这样的,不知道的可以看我上片文章
String real_url = String.format(url, zoom, y, x);
LatLng mLatLng = mAMap.getProjection().fromScreenLocation(new Point(x,y));
Log.e("getTileUrl",x+","+y+""+" "+mLatLng+" "+real_url);
return new URL(real_url);
我们需要对这部分代码进行修改,修改后如下
加载影像底图部分
String ALBUM_PATH = getExternalFilesDir(Environment.DIRECTORY_PICTURES).getPath()+"/Cache/";
Bitmap mBitmap; String mFileDirName = String.format("L%02d/", zoom + 1)+"img/"; String mFileName = String.format("%s", TileXYToQuadKey(x, y, zoom));//为了不在手机的图片中显示,取消jpg后缀,文件名自己定义,写入和读取一致即可,由于有自己的bingmap图源服务,所以此处我用的bingmap的文件名 String LJ = ALBUM_PATH +mFileDirName+ mFileName; Log.e("getTileUrl是图片否存在: ", "getTileUrl: "+(MapImageCache.getInstance().isBitmapExit( mFileName,ALBUM_PATH +mFileDirName))+""); if (MapImageCache.getInstance().isBitmapExit( mFileName,ALBUM_PATH +mFileDirName)) {//判断本地是否有图片文件,如果有返回本地url,如果没有,缓存到本地并返回googleurl Log.e("存在: ","file://" + LJ); return new URL("file://" + LJ); }e