多视角三维仿真数字城市实现方法
精度评定的计算:
不同次数的多项式逼近的效果不同,高次多项式能更精确地拟合控制点周围的区域,相应的数学运算量就越大,计算机实现也更复杂。通过实验,以一次多项式模拟三维仿真地图逻辑坐标与二维地图地理坐标之间的坐标变换,其精度完全可以满足地图服务的需要。坐标转换控制点数据的质量对坐标转换的精度有很大影响。提高坐标转换的精度,首先,要保证控制点数据的准确性。其次,在保证数据准确性的情况下要采集尽量多的控制点,控制点在地图上的分布要均匀。
4 多视角三维仿真地图的实现
4.1 同尺度地图的动态调用与发布
在指定地图比例尺条件下,将目标位置的地图数据显示在地图可视化窗口的中心,是三维仿真城市地图中最常用的地图显示功能,下面讨论在指定目标中心位置逻辑坐标(pixelX,pixelY)情况下的地图数据的调用与发布。
由于三维仿真地图数据以地图瓦片的形式存储在数据库中,而每一个地图瓦片可以视作网格化的图片。这里采用与瓦片化的地图数据相适应的基于网格阵列地图数据显示方法,即地图显示窗口由一组地图网格阵列进行填充,每一个地图网格阵列中的网格对应一个地图瓦片,在地图数据填充时,地图网格阵列的中心瓦片的中心位置定位在地图显示窗口的正中央,然后根据目标中心位置计算地图网格阵列的偏移值,通过偏移值的调整使地图目标中心定位到地图窗口的中央,完成地图的显示。
首先需计算出填充地图可视化窗口所需要的地图网格阵列的大小,并根据地图网格阵列的大小生成与可视化窗口相适应的地图网格阵列,网格阵列的长宽的计算规则如下:
式中:gridWidth与gridHeigth分别代表网格阵列的宽与高;screenWidth与screenHeight分别代表地图显示窗口的像素宽与像素高;tileSize为地图瓦片块的像素宽度; 表示向上取整数操作。
上述规则保证了地图显示窗口中的地图网格阵列为奇数行和奇数列,这样地图网格阵列始终会存在一个中心网格,与中心网格相对应的地图数据瓦片可以作为地图瓦片填充的参考的中心位置,网格阵列中其他地图瓦片文件就能够以它为参考,以高效率的对称扩散的方式完成地图数据的填充,直到整个地图数据方阵都完成填充为止。此外,该规则为后面的地图中心偏移校正提供了足够的地图数据量,防止了地图偏移调整后,地图显示窗口留白的出现。
由地图瓦片所在的图层序号以及地图瓦片所在图层的行号与列号可以确定唯一的瓦片编码,每个瓦片编码对应唯一的地图瓦片。因此目标地图瓦片的获取首先要根据目标中心位置的三维逻辑坐标计算地图瓦片的行列号,地图中心网格对应的中心地图瓦片行列号的计算方法如下:
式中:n为金字塔图层序号(从第0层起算);rowID与columnID分别为在第n层地图中,目标中心位置所在的行号与列号;m代表金字塔的总图层数; 表示向下取整操作。
得到中心地图瓦片的行列号,根据网格阵列的长宽值,通过简单的加减操作计算网格阵列中其他网格对应的地图瓦片的行列号。然后根据1.2节中所述的编码计算方法即可获得地图瓦片的编码,根据获得地图瓦片编码获取地图瓦片数据完成地图格网阵列的填充。
地图数据块填充后,地图目标中心位置并没有位于地图可视化窗口的中央,需要吧地图网格阵列做进一步的校正来使它们吻合。地图网格阵列在可视化窗口X轴与Y轴方向上的偏移量offsetX、offsetY的计算方法如下:
把填充后的地图网格阵列按照计算的偏移量进行校正,使地图目标中心点便位于可视化窗口的中央,完成地图显示。
4.2 不同尺度地图的调用与发布
对于传统的电子地图,在进行地图放大、缩小等操作时,不同比例尺的地图数据会随地图操作实时生成,而三维仿真地图数据的地图数据是已经生成的,地图缩放等涉及到地图比例尺的变化的操作只能通过金字塔不同尺度的地图瓦片的变换进行模拟,虽然这种模拟的变换没有传统的电子地图灵活,但是这种变换方式节省了实时生成不同比例尺地图的地图数据的时间,提高了地图显示的效率。
不同尺度地图对应不同的子金字塔地图层,地图缩放操作通过对不同尺度地图瓦片的变换来模拟。首先记录地图可视化窗口中心点的逻辑坐标(pixelX,pixelY)与地图变换的目标图层序号,然后采用3.1小节中所述的方法计算比例尺变换后地图显示窗口的地图瓦片的编码值,替换地图瓦片数据,并重新计算地图格网阵列的偏移值进行校正,完成不同层地图瓦片的变换,三维仿真地图缩放效果如图2所示。
图2 三维仿真地图的缩放
4.3 不同视角地图的动态调用与发布
多个视角的三维仿真地图数据之间的切换是多视角三维仿真城市地图操作的重要功能,不同视角的三维仿真地图的切换涉及到不同金字塔间地图瓦片的变换。不同视角的三维仿真地图数据采用了不同的逻辑坐标系统,但不同视角的三维仿真地图数据采用的逻辑坐标系统都能够采用第2小节中所述的坐标转换方法与地理坐标进行自由转换,这里借助地理坐标作为两坐标系统之间转换的桥梁建立两坐标的变换关系。
如图3所示,在不同视角的三维仿真地图数据之间进行切换时,首先要记录当前地图可视化窗口中心点的在A视角下的逻辑坐标,然后根据A视角下三维仿真地图逻辑坐标与地理坐标的转换关系,将该逻辑坐标转换为标准