OpenStreetMap(简称OSM) 开源wiki地图。
https://www.openstreetmap.org/#map=12/39.9022/116.3848
一般的地图都是通过在后台发布切片,前端的引擎读取进行展示,地图切片有些是用经纬度切的,有些是用谷歌的墨卡托切的,所以根据一定的坐标范围和缩放等级,就能计算其中的切片横纵顺序,得到详细的z(缩放)、x(横向)、y(纵向)数字,再根据基础的服务器url,就可以将本张切片下载到本地,多张切片合并成一张,赋予坐标信息,就变成地图影像了,一般的地图下载工具也是按照这个原理进行下载生成的。
OSM是一个开源开放的地图,它的地图切片是按照经纬度切的,即EPSG:4326的,在经纬度计算切片的时候,并不需要把坐标转换成web墨卡托的坐标,下边分享一个根据经纬度坐标计算切片顺序的代码(python):
def deg2num(lat_deg, lon_deg, zoom):
lat_rad = math.radians(lat_deg)
n = 2.0 ** zoom
xtile = int((lon_deg + 180.0) / 360.0 * n)
ytile = int((1.0 - math.log(math.tan(lat_rad) + (1 / math.cos(lat_rad))) / math.pi) / 2.0 * n)
return (xtile, ytile)
传入经纬度坐标和缩放级别,就能找到坐标是在哪张切片上,经度方向是等分的,这个在计算的时候就比较简单,纬度是在高纬度的距离变窄,所以,要通过一个复杂的数学公式计算,等级越高,切片数量越多,下载的切片就越多,是按照平方的数量进行增加的。
下载的切片坐标范围,并不一定是和传入的坐标范围相同,所以,地图下载器有时也是,合并的影像并不是传入的四个范围,这个在后期要有一定地图裁切。
一个基础的OSM切片地址:
https://b.tile.openstreetmap.org/{0}/{1}/{2}.png
一张下载的切片,合并的时候可以使用gdal等类库,这对合并和计算合并完成后的地图四至有相当方便的帮助。
更多文章请关注公众号