如何根据地图的范围计算其中切片的行列号,各类的地图引擎能加载的,是能计算并显示对应的图片,地图的下载工具,也是计算了切片的等级和行列号,再下载对应的图片,按照顺序存储在本地或者数据库里。
将切片拼接在一起,加上坐标的信息,就变成地图影像了,当然最初可能切片也是根据地图影像,来切割出来的。
下边分享一个简单的tianditu切片的行列号计算方法,对应的是tainditu的“经纬度”地图切片,当然球面墨卡托的计算方式也差不多。
两种地图:
tianditu经纬度的切片地图范围为[-180,-90,180,90],切片地图的原点是-180,90,地图级别从1开始,第一级别的地图切片尺寸为横向512px,纵向为256px,由两张256*256的切片组成,第1级地图的分辨率为360/512,地图每增加一级,分辨率对应缩小到上一级的1/2。
切片序号的顺序是从原点处开始的,越靠近地图原点,编号就越小。
假如给定一个地图的经纬度范围[xmin,ymin,xmax,ymax],地图的第一级分辨率定义initResolution,要获取地图切片的级别为level。
获取地图当前级别的最小行号和列号:
列号
= ((xmin- (-180)) / (initResolution/2^(level-1)))/256
行号
=-1* ((ymax- 90) / (initResolution/2^(level-1))+0.5)/256
获取地图当前级别的最大行号和列号:
列号
= ((xmax- (-180)) / (initResolution/2^(level-1))+0.5)/256
行号
=-1* ((ymin- 90) / (initResolution/2^(level-1)))/256
256分别为切片的宽高像素值,如有不同,需要根据切片实际尺寸计算,坐标计算的时候,需要减去中心点的值,再根据级别计算当前级别的分辨率。
这样根据最大、最小行列号算出一个数字的范围,上边的值都要转换成int类型的,再加上请求的级别,就可以获取当前的切片数据了。