天天看点

地形切片地形切片

地形切片

切片技术

切片是一种对大规模数据分级分块加载的思想,即,当显示范围大时,加载粗糙数据,显示范围小时加载精细数据,从而保证对地图数据的加载开销不会太大。

目前常用的切片主要分为矢量切片和栅格切片,顾名思义,矢量切片存储的是矢量数据,加载后需要实时渲染,而栅格切片存储的数据就是图片,这一本质区别决定了矢量切片和栅格切片各有优劣:

  • 矢量切片需要实时渲染,其效率较栅格切片低,但是可以灵活、快速地切换样式、开关图层,并且数据量小
  • 栅格切片直接请求图片,效率高,但是图片已经固定,无法进行图层操作,数据量较矢量切片大

同理,地形切片就是一种对大规模地形数据的分级分块处理方法,鉴于没找到较好的开源地形切片解决方案,这里我依照传统矢量和栅格瓦片的处理方案,生成一种自定义的地形数据解决方案。

地图切片的基本原理

Web 墨卡托投影

Web墨卡托投影(又称球体墨卡托投影)是墨卡托投影的变种,它接收的输入是Datum为WGS84的经纬度,但在投影时不再把地球当做椭球而当做半径为6378137米的标准球体,以简化计算。同样为了方便,设计师舍弃了高纬度地区的数据,使地球投影后得到一个方形区域,即Web墨卡托投影的世界范围为:**[-π * R,π * R] [-π * R,π * R] **

瓦片金字塔模型

  • 内容从粗到细,从顶层到基层等各种数据演变的模型称为金字塔模型, 瓦片地图也是一种从粗倒细逐渐演变的数据结构。
  • 瓦片数据就是在同一级别中按照整体的行列组织,上一级和下一级之间数据细节会发生变化,要描述更多的细节就需要更大的描述空间,换言之就是使用更多的瓦片描述细节。
  • 任意的直角坐标系下的地图数据都可以按照区域来划分,瓦片是一种简单而直接的划分地图数据的方式。瓦片是具有相同宽和高的(纵横跨度相同)的数据块。
  • 通常瓦片的索引由三维纬度的坐标来确定:
    • zoom 瓦片的缩放等级
    • colum 瓦片列号
    • zoom 瓦片行号
地形切片地形切片
怎么对这堆图片进行编号,是目前主流互联网地图商分歧最大的地方。总结起来分为四个流派:
  • 谷歌XYZ:Z表示缩放层级,Z=zoom;XY的原点在左上角,X从左向右,Y从上向下。
  • TMS:开源产品的标准,Z的定义与谷歌相同;XY的原点在左下角,X从左向右,Y从下向上。
  • QuadTree:微软Bing地图使用的编码规范,Z的定义与谷歌相同,同一层级的瓦片不用XY两个维度表示,而只用一个整数表示,该整数服从四叉树编码规则
  • 百度XYZ:Z从1开始,在最高级就把地图分为四块瓦片;XY的原点在经度为0纬度位0的位置,X从左向右,Y从下向上。

瓦片计算

当知道了瓦片的编号规则和瓦片编号,就可以轻松得到瓦片的空间范围,例如,当以z x y分别表示瓦片的缩放等级、列号和行号,瓦片起算为左上角,以及缩放等级从 0 级开始时有:

s p a n = 2 ∗ π ∗ R / 2 z span = 2 * π * R / 2^z span=2∗π∗R/2z

X = − π ∗ R + x ∗ s p a n X = - π* R + x * span X=−π∗R+x∗span

Y = π ∗ R − y ∗ s p a n Y = π * R - y * span Y=π∗R−y∗span

其中 span 为瓦片跨度,X、Y 为瓦片左上角坐标

因此,对于编号规则和编号已知的瓦片,其空间范围是已知的

自定义地形切片

地形切片的构建思路

其定义地形切片构建的核心是 根据瓦片的范围,去大块的地形上取得所需要的数据

  1. 首先构建一个大的地形tif数据,可采用arcgis的镶嵌功能实现
  2. 根据需要生成地形切片的范围,确定合理地地形切片分级数和行列范围
  3. 根据每个瓦片的范围不断去大的地形数据上采样,最终输出为自定义的地形切片

地形切片实现

这里由于我需要在地形切片上再叠加纹理,所以把地形切片混合到自定义地球表面数据中去,在OSG 渲染栅格数据到地球中我介绍了如何根据栅格切片或者DEM输出自定义面向渲染的已进行三维表面重建的二进制数据,这里,我们把 DEM 数据结合到栅格瓦片的三维表面重建中,就得到了包含 DEM地形数据、表面重建信息的二进制数据

在OSG 渲染栅格数据到地球中我们实现了对任意瓦片、包含范围信息的DEM数据的三维表面重建,其原理都是对栅格数据进行采样,每个采样点的地理坐标都可以计算得到,再将其映射到地球表面(xyz坐标系)即可,这次,我们将栅格数据的采样和输出跟DEM数据结合,使其输出的数据包含高程信息,这样在坐标转换到 xyz 坐标系时就会产生地形起伏

整体的思路比较简单,过程中需要注意以下几点:

  • 使用的数据投影应保持一致,DEM 数据应先投影到 Web 墨卡托
  • 注意为每个瓦片构建一个合适大小的缓冲区,对连续地形进行接边处理
  • 可通过调整数据的采样间隔来平衡数据量和渲染质量
地形切片地形切片