高德地图加载谷歌地图瓦片

实现效果

简介

苦逼外业实验需要用到无人机采集数据,遂利用高德地图SDK和DJI Mobile SDK开发了一款无人机航线规划软件。当地也不算偏僻,然而高德卫星地图缩放等级约为16,无法满足作业需求。调查了其他图源,如腾讯地图、百度地图、Bing地图和谷歌地图等,发现Bing和谷歌卫星地图分辨率基本能够满足全国各地的作业需求,而在这两者之中,Bing地图图源较老,最终决定将谷歌卫星地图作为航线规划APP底图之一。

技术路线

查询了安卓加载谷歌地图的相关资料,主要有两种思路:

  1. 直接调用Google Map SDK。由于众所周知的原因,大部分时间都浪费在爬梯子和安装Google play service 上。脑儿疼。调用高程服务还得有次数限制,或是要收费。个人用途APP经费不足,不再考虑该路线。

  2. 使用 osmdroid(open street map)。开源的地图框架,截至2019年8月17日,已经更新到6.1.0版本,而网上的教程多发布于一两年前甚至三四年前,版本号大多在6.0之前,一些接口已经发生变化。考虑到从高德地图移植到osmdroid需要耗费较大精力,且本菜鸡历经多次尝试仍未走通的情况下(瓦片地址没问题,osmdroid加载瓦片没走通),姑且放弃该路线。若有兴趣,请移步至以下博客自行探索。如果实现,欢迎交流! 2020.10.24更新该方案已实现。使用谷歌卫星地图+天地图道路标注,地图缩放层级最高达到22级,无需进行WGS84和GCJ02坐标系之间的转换。POI需自己实现(利用其他平台的逆地理编码工具);某些瓦片会出现未及时刷新或是未及时清理的问题,需自行处理。有空再完善该方案。

      osmdroid 在线加载谷歌瓦片(谷歌地图瓦片地址解释)   
      https://blog.youkuaiyun.com/qq_16064871/article/details/78869326   
      osmdroid 6.0.1基础测试   
      https://blog.youkuaiyun.com/qq_16064871/article/details/79667834    
      osmdroid 6.0.1加载天地图在线矢量和影像数据    
      https://www.2cto.com/kf/201803/728507.html
    
  3. 使用高德地图Android 地图SDK及其中的Tile Overlays类加载谷歌瓦片。参考了谷歌地图官方示例的TileOverlayDemoActivity和osmdroid路线中在线加载谷歌瓦片的方法,发现高德地图SDK中恰巧也有类似的方法,很快走通。本文最终采用了该方法。

实现步骤

  1. 显示高德地图
    参见https://lbs.amap.com/api/android-sdk/guide/create-map/show-map高德地图官方文档。教程十分详细,不再赘述。
  2. 设定地图加载完成的监听,并重写回调函数。关键代码如下:
//谷歌地图瓦片地址格式
String GOOGLE_SATELLITE_URL_FORMAT = "http://mt0.google.cn/vt/lyrs=y@126&hl=zh-CN&gl=cn&x=%d&y=%d&z=%d&s=Galil";
aMap.setOnMapLoadedListener(new AMap.OnMapLoadedListener() {
   
   
           @Override
           public void onMapLoaded() {
   
   
               TileProvider tileProvider = new UrlTileProvider(256, 256) {
   
   
                   @Override
                   public synchronized URL getTileUrl(int x, int y, int zoom) {
   
   
                       String s = String.format(Locale.US, GOOGLE_SATELLITE_URL_FORMAT, x, y, zoom);
                       URL url = null;
                       try {
   
   
                           url = new URL(s);
                       } catch (MalformedURLException e) {
   
   
                           throw new AssertionError(e);
                       }
                       return url;
                   }
               };
               TileOverlay tileOverlay = aMap.addTileOverlay(new TileOverlayOptions().tileProvider(tileProvider));
           } 

结果

最终加载结果见图。初步调查显示,地图标注基本正确,同名地物点与高德地图叠置完美、无偏移。国界线基本没有问题,不是最近频繁被点名的问题地图,可放心使用。外业基地位于北纬31.6133437322度,东经119.1605687141度附近,加载了谷歌地图瓦片后完全能够满足作业需求,且只需在高德地图中添加不到20行代码,十分方便。下图
附:谷歌地图瓦片地址解释

eg:http://mt2.google.cn/vt/lyrs=m@167000000&hl=zh-CN&gl=cn&x=420&y=193&z=9&s=Galil

1)mt2.google.cn :Google瓦片服务服务器。
Google提供多台瓦片服务器,减轻服务器负载,提高网络访问效率。可以选服务器:
mt0.google.cn mt1.google.cn
mt2.google.cn mt3.google.cn

2)lyrs=… 表示的是图层类型。 m:路线图 t:地形图 ​p:带标签的地形图 ​s:卫星图 y:带标签的卫星图
​h:标签层(路名、地名等,貌似是旅游地图标注)

3)&x=… &y=… &z=… x瓦片的横向索引,起始位置为最左边,数值为0,向右+1递增。
y瓦片的纵向索引,起始位置为最上面,数值为0,向下+1递增。 z地图的级别Zoom,最上一级为0,向下依次递增。(0~22)

4)&s=… 不明,url有无此后缀都不影响瓦片地址的访问。

2020年6月1日

使用高德地图加载谷歌瓦片 targetSdkVersion 需小于等于 26,似乎是http的问题,由于已改用哦OSMdroid,不再深入探究。 有兴趣可尝试将http协议改为https协议,或者在application中设置android:usesCleartextTraffic="true" // 此项设置影响安全

2021年1月12日

新增openStreetMap图源如下:


import com
评论 48
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值