实例介绍
【实例简介】
最近开发的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;
}
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享及AI技术自动生成,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论