• 14阅读
  • 0回复

Qt代码实现地图瓦片电子放大/无极缩放/可将层级拓展到22级别/精确到0.03米 [复制链接]

上一主题 下一主题
离线liudianwu
 

只看楼主 倒序阅读 楼主  发表于: 昨天 13:08

想实现这个功能由来已久,对标奥维地图或者qgc等地图控件,都具备这个功能,也就是当瓦片不存在的时候,先查找上级瓦片,然后裁切对应区域,最后拉伸填充到当前瓦片区域,看起来会模糊一些,但总归是效果满足人眼的需要,不然就是一个空白区域很突兀。理论上来说,地图放大的时候,上一级的瓦片之前是肯定加载过的,那就可以利用这个机制做文章,有标准公式来计算,比如当前瓦片区域对应x、y、z,他的上级瓦片是x/2、y/2、z-1,然后再根据xy的奇数偶数,来判断需要裁切四个区域的哪个区域,按照这个机制吭哧吭哧一顿输出,搞完收工非常完美,先从内存瓦片中找到对应上级的瓦片,裁切对应区域拉伸填充占位,再去联网下载瓦片,下载好了再覆盖对应区域,整体上看下来就是先一个模糊的瓦片,下载好了替换后就是一个清晰的图片

光有这个查找上级的功能还是不够的,顺藤摸瓜能不能实现无极缩放呢?或者最少两到三个级别,观察发现市面上的其他地图软件,几乎都是2-3级别,后面发现有通用的公式,传入xy和层级,直接裁切哪个区域的图片返回,2级别是图片的八分之一,3层级就是16分之一,层级越大切割的数量越多,图片月模糊,又是一顿吭哧吭哧搞,实现了无极缩放,用户非常满意,理论上来说,只要提供一张最初的世界地图瓦片,可以无极缩放到所有层级,后面验证下来,我还是太年轻了,超过8个层级,居然用的原始图片裁切的,原来最大只能往上找8个层级,因为第八层级就已经是256等分了,如果是256的瓦片,就是一个像素要填充一个区域,全是马赛克,再小就是0,导致裁切失败返回的原图。

欢迎关注微信公众号:Qt实战/Qt入门和进阶(各种开源作品、经验整理、项目实战技巧,专注Qt/C++软件开发,视频监控、物联网、工业控制、嵌入式软件、国产化系统应用软件开发) QQ:517216493  WX:feiyangqingyun  QQ群:751439350
快速回复
限100 字节
 
上一个 下一个