高德地图安卓端实现卫星地图路网功能

  • 项目需求场景——
    绘制地块时需要显示卫星地图,还要显示路网信息

  • 遇到的问题——
    目前高德地图只提供两种地图类型:
    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”>

你可能感兴趣的:(高德地图安卓端实现卫星地图路网功能)