一、场景描述:
目前主流的地图瓦片规则都是2的n次幂乘2的n次幂(2x4,4x8,8x16....),但是有些软件厂商采用的瓦片规则除外(比如5x10,10x20,20x40),如何将不同规则的瓦片转换到自己平台上使用,是本篇文章的目的。
本篇文章以将(2x4,4x8,8x16)瓦片转换成(5x10,10x20,20x40)瓦片为例
二、实现思路
1.首先确定两种规则下瓦片level之间的对应关系,即目标平台的某level级别下的瓦片应该使用源平台的哪一层level进行转换(两平台表达内容详尽程度最相近的level),定义结构瓦片规则如下
struct Tile_Rule{
int topLevelRowCount; //最高level的行数
int topLevelColCount; //最高level的列数
int size; //瓦片像素
int topLevel; //最高级level
int btmLevel; //最低级level
};
两种瓦片同一级别下详尽程度可以用像素数来表示,那么同一级别下瓦片的详尽程度比例是
//dstRule为目标瓦片规则,srcRule为源瓦片规则
double detailRatio = (dstRule.size*dstRule.size*dstRule.topLevelRowCount*dstRule.topLevelColCount)/(srcRule.size*srcRule.size*srcRule.topLevelRowCount*srcRule.topLevelColCount);
同一瓦片规则下,下一级level像素数是上一级的4倍,那么就是两种瓦片规则下

本文介绍了一种将不同瓦片规则(如2的幂规则转为非标准规则)的地图瓦片进行转换的方法,通过计算详尽程度比例和大小比值,确定源瓦片的层级与目标瓦片的对应关系,并通过裁剪与缩放实现瓦片的转换。
最低0.47元/天 解锁文章
1011





