- 项目需求场景——
绘制地块时需要显示卫星地图,还要显示路网信息
-
遇到的问题——
目前高德地图只提供两种地图类型:
AMap.MAP_TYPE_NORMAL 普通地图
AMap.MAP_TYPE_SATELLITE 卫星地图
前者提供了丰富的路网信息和建筑地标等信息,但是无法满足我们的卫星地图需求。
普通地图——包含路网和建筑地标等信息
后者除了卫星地图之外不提供任何额外信息
卫星地图——毛都没有
解决方案——
我尝试使用路况图层来显示路网信息,但是效果很差,而且并没有地标和其他标记信息
路况图层——呃。。。并没有什么卵用
后来找到了解决问题的终极方案,这还要感激我们的另外一个需求。
我们的项目需求中有一个是从用谷歌地图的图层进行遮罩,以解决部分区域地图无法显示的问题(此区域无图片信息),因为谷歌地图的覆盖区域和图片信息量是远远超过高德地图的。
我们采用的方式是添加RemoteOverlay瓦片图层的方式实现。具体代码为:
void addRemoteOverlay() {
final String url = "https://mt3.google.cn/maps/vt?lyrs=y@194&hl=zh-CN&gl=cn&x=%d&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, x, y, zoom));
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
});
tileOverlayOptions.diskCacheEnabled(true)
.diskCacheDir("/storage/emulated/0/amap/OMCcache")
.diskCacheSize(100000)
.memoryCacheEnabled(true)
.memCacheSize(100000)
.zIndex(-9999);
googleTileOverlay = aMap.addTileOverlay(tileOverlayOptions);
}
final String url = "https://mt3.google.cn/maps/vt?lyrs=y@194&hl=zh-CN&gl=cn&x=%d&y=%d&z=%d";
为瓦片图片模板格式,其中参数lyrs有三种类型:lyrs=y为混合地图,s为卫星地图,m为普通地图
。我们使用谷歌地图的瓦片图层的时候默认采用的是lyrs=s,也就是普通的卫星图层,现在我们希望包含路网信息,只需要设置lyrs=y就OK了。
完美实现!
以上。
文中提到的绘制地块、图层遮罩、瓦片图层等技术不在此篇讨论范围,如有兴趣请私信或者留言咨询。以后有机会我也会逐渐把这些知识梳理出来,分享给大家。
<转载时请注明“来自简书-EvenZhu”>
网友评论