一、概述
最近在做项目的时候,需要用到google离线地图,但是google并没有提供离线地图下载的接口。通过在网上查找资料后发现,google的离线地图可以通过下载tile、然后在地图上添加tile来完成。下面我们一起来看看怎么下载google map tile。
二、下载网址
需要下载google map tile我们首先需要的就是下载地址,在此google为我们提供了四个下载的基础地址:
使用这些基础下载地址是无法进行下载的,因为我们必须要指定你下载tile索引和zoom。同时还可以指定下载的tile类型、语言、国家、以及屏幕密度等等的参数。下面我们来看一个可以下载tile的地址:
http://mt3.google.cn/vt/lyrs=m&hl=zh-CN&gl=CN&scale=3.0&x=6464&y=3363&z=13 上面的就是我下载tile时的完整下载地址,下面说说每个参数的含义:
1. lyrs
含义:需要下载的地图类型,如果不传入此参数,默认是默认地图类型,即m,地图类型包括以下4种:
- m —— 默认地图类型
- p —— 地形图
- y —— 卫星图
- h —— 标签层
2. hl
含义:语言代码,会下载你传入的语言的map tile,如果没有这个语言。会下载英语的map tile。
3. gl
含义:国家代码,hl、gl对于需要多语言的app非常有用,如果不传入这两个参数,默认下载下来的tile会是英语。
4. scale
含义:屏幕像素密度,即context.resources.displayMetrics.density
获取到的值,这个参数很重要,如果你不下载手机对应的屏幕密度的tile,那么,加载出来的地图可能是模糊的,因为在当前屏幕密度下,下载的tile的清晰度不够,如果不传入此参数默认为1。
5. x、y
含义:当前zoom下的当前tile的索引,x、y的计算方法如下:
val y = Math.floor((1 - Math.log(Math.tan(aLat * Math.PI / 180) + 1 / Math.cos(aLat * Math.PI / 180)) / Math.PI) / 2 * (1 shl zoom)).toInt()
val x = Math.floor((aLon + 180) / 360 * (1 shl zoom)).toInt()
其中,aLat为经度,aLon为纬度,zoom为你需要下载tile的缩放倍数。通过上面的方法就可以计算出对应的title的索引。
6. zoom
含义:需要下载的地图的缩放倍数,比如,你需要的离线地图的缩放倍数是15,那么zoom就是15。此参数对应于x、y索引的计算的zoom。
至此我们已经可以拼接下载tile的下载地址了。
三、tile下载
上面已经详细的说明了tile的下载地址的拼接,有了下载地址我们通过网络下载保存tile到本地就可以了,对于网络下载这里就不做说明了。下载好title后,在需要使用离线地图的时候,通过addTileOverlay
加载对应的tile即可。把tile添加到地图上,请参考:google官网地址