测绘地理信息   2016, Vol. 41 Issue (3): 56-58
0
基于Android手机的三维天地图应用研究[PDF全文]
田士如1, 代侦勇1, 白帆2    
1. 武汉大学资源与环境科学学院,湖北 武汉,430079;
2. 武汉大学测绘遥感信息工程国家重点实验室,湖北 武汉,430079
摘要: 利用最新的Web3D技术构建几何地球,通过反向墨卡托投影建立几何地球上的点与天地图上的点的对应关系,确定天地图WMTS瓦片的行列号与级别,实现实时天地图瓦片的获取与3D贴合。最后,利用Javascript命令打通Android应用和Web应用之间的联系,实现具有高度可移植性的Android三维天地图应用。
关键词: Web3D     三维地球     球面墨卡托     天地图    
Application of 3D Tianditu Map Based on Android Cellphone
TIAN Shiru1, DAI Zhenyong1, BAI Fan2    
1. School of Resource and Environmental Sciences, Wuhan University,Wuhan 430079, China;
2. State Key Laboratory of Information Engineering in Surveying, Mapping and Remote Sensing, Wuhan University, Wuhan 430079, China
Foundation support:The National Natural Science Foundation of China (41571344)
Abstract: Using the latest Web3D technology to build Geometric Earth, we establish the correspondence between the points of Geometric Earth and the points of Tianditu map based on the reverse Mercatorprojection for determining the rank and number of Tianditu map WMTS tiles and achieving the Tianditu map tiles which fits 3D real\|time. Finally, an application of Android 3D Tianditu map with a high degree of portability was built by using the Javascript to open contact between Android applications and Web applications.
Key words: Web3D     3D Earth     spherical Mercator     Tianditu map    

天地图从2011年1月8日上线至今,应用和用户规模与国际领先的谷歌地图相比差距较大[1],应用生态的建立需要更多的优质创新应用。

自2007年11月5日Google推出专门为移动设备设计的开源操作系统Android以来[2],各种移动终端软件飞速发展,为传统基于Windows Mobile平台的移动GIS开发带来了机遇[3,4]。短短几年时间,Android的CPU从22 nm工艺发展到14 nm工艺,从单核发展到8核,性能已经有了长足的发展。然而GPU水平却进展缓慢,国内已有学者在实现三维引擎上进行了研究[5,6],但关于这方面的研究还比较少。本文以天地图为数据基础,将近年长足发展的Web3D技术应用到手机上,充分调用手机过剩的CPU性能和有限的GPU性能,同时使用三维实时瓦片运算和逆向球面墨卡托贴合,实现天地图电子地图和影像地图的三维展示和应用。

1 技术方案 1.1 总体技术方案

应用基于移动智能终端上的Android系统开发,SDK版本为19.0,使用Java语言,JDK版本为1.8,开发工具为Android Studio1.1。三维显示部分使用基于HTML5的Web3D技术,采用WebGL标准,使用JavaScript进行开发和渲染,地图数据则是来自天地图WMTS发布的瓦片,包括电子地图和影像地图以及各自对应的注记,为了显示出三维效果,也叠加了天地图提供的地形图图层。此外,为了在研究的基础上有一定的功能性,应用调用了移动智能设备上的GPS传感器,实现了在三维天地图上的定位功能。

1.2 详细技术路线

应用主要研究了Android系统上高性能三维GIS展现,实现天地图的三维可视化,采取了以下技术路线:①本应用是传统Android应用和基于HTML5的Web应用的结合,因此界面设计语言和逻辑开发语言使用了两个平台各自的语言;②Android应用和Web应用之间本无交集,本应用中,借鉴网页开发时的开发者模式中的控制台,使用Javascript命令完成两者之间的交互;③三维数据展示虽然以HTML5为基础,但无需Web服务器,网页文件存于本地,调用来自天地图服务器的WMTS瓦片数据;④在用户通过手指控制三维地球时,计算当前显示的范围,通过屏幕分辨率和瓦片图片的分辨率,计算出所需瓦片的级数和行列号,然后通过WMTS服务获取相应的图片;⑤自2013年天地图发布2.0版本之后,投影方式已经从原来的高斯-克吕格投影变为球面墨卡托投影,因此要将获取的瓦片贴合到三维地球上去,还需要将瓦片数据进行一个逆向墨卡托投影。图 1为总体技术路线图。

图 1 技术路线图 Figure 1 Technology Flow Chart

2 系统实现

应用主旨是研究在Android智能移动终端上的高性能三维GIS的可行性和天地图的三维可视化,可以为用户提供三维地图浏览、定位等功能。图 2为应用在华为P8上的运行效果图。右上方为电子地图和影像地图切换的按钮,左下角为定位按钮,其他操作均以手势完成,操作逻辑与主流地图应用一致:双指向外滑动放大,向内滑动缩小,单指滑动旋转地球,连续轻触屏幕放大等。本系统成功让基于HTML5的Web3D技术和Android在移动三维GIS上结合,较好完成了天地图在Android端的三维可视化,验证了上述技术方案的可行性。

图 2 系统界面 Figure 2 Interface of the System

3 关键技术与创新点 3.1 瓦片贴合

天地图采用球面墨卡托投影,它与常规墨卡托投影的主要区别是把地球模拟为球体,而非椭球体[7]。假设地球被围在一个中空的圆柱里,其赤道与圆柱相接触,然后假想地球中心有一盏灯,把球面上的图形投影到圆柱体上,再把圆柱体展开,这就是一幅标准纬线为零度(即赤道)的墨卡托投影绘制出的世界地图。设地球为正球体,纬度为B、经度为L(单位:rad),纵直角坐标为XN,横直角坐标为YE(单位:m),基准纬度 BO,原点纬度O,原点经度 LO,由地理坐标系到投影坐标系的转换公式为:

$\left\{ \begin{array}{l} {X_N} = K \cdot \ln \left[ {\tan \left( {\bar 4 + \frac{B}{2}} \right)} \right]\\ {Y_E} = K \cdot \left( {L - LO} \right) \end{array} \right.$ (1)

式中,K=R·cosBOR为地球半径。

建立三维地球模型,设球心O(0,0,0) ,半径为地球半径R,球面上的点M(x,y,z)满足如下条件:

$\left\{ \begin{array}{l} x = R\sin \theta \cos \varphi \\ y = R\sin \theta \sin \varphi \\ z = R\cos \theta \end{array} \right.$ (2)

式中,θOMz轴的夹角;φ是从正向x轴逆时针方向转到OMXOY平面上投影的角度,0≤θπ,0≤φ≤2π。则有:

$\begin{array}{*{20}{c}} {\theta = \arccos \left( {\frac{z}{R}} \right)}&{\varphi = \arctan \left( {\frac{y}{x}} \right)} \end{array}$ (3)

θφ转化为经纬度分别代入式(1) 可得:

${X_N} = K \cdot \ln \left[ {_{\tan }\frac{{ - \arccos \left( {\frac{z}{R}} \right)}}{2}} \right]$ (4)
${Y_E} = K \cdot \left[ {\arctan \left( {\frac{y}{x}} \right) - 2 - LO} \right]$ (5)

由此可建立投影地图上的点(XN,YE)和球面上的点M(x,y,z)的关系,将投影地图贴合到三维地球上。

3.2 实时瓦片获取

Google提出的地图切片技术是目前解决互联网地图应用效率问题的主要方式[8]。天地图地图服务使用WMTS发布,获取其瓦片时,需要确定地图缩放级别和地图瓦片行列号。

1) 确定地图缩放级别。在球面模型的ZOY面上选取两点A、B,两者距离为d,其在屏幕上对应的点为APBP,两者距离为dP,屏幕分辨率为Re(像素/m),则比例尺S的计算公式如下:

$S = {d_p}/{\mathop{\rm Re}\nolimits} /d$ (6)

计算得到比例尺后与天地图每个级别的比例尺比较即可得到需要的瓦片级别L。天地图每级比例尺如表 1所示。

表 1 天地图每个级别参数 Table 1 Parameters at Each Level of Tianditu Map

2) 确定切片行列号。根据3.1节建立的关系,可以根据地球上的点M(x,y,z)算出投影地图上对 应的点(XN,YE)。天地图切片为256像素×256像素,设L级别下地面分辨率为DL,投影地图坐标范围为(-πR,-πR)到(πR,πR),当在(-πR,-πR)时,行列号r和c都为0,rc与坐标之间的关系如下:

$r = \frac{{{Y_E} + R}}{{256{D_L}}},c = \frac{{{X_N} + R}}{{256{D_L}}}$ (7)

天地图电子地图瓦片获取路径如下:http://t0.tianditu.cn/vec_c/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=vec&STYLE=default&TILEMATRIXSET=c&TILEMATRIX={L}&TILEROW={r}&TILECOL={c}&FORMAT=tiles。电子地图注记、影像地图、影像地图注记与上面的形式相同。

3.3 使用WebGL三维引擎

目前,代表手机CPU最高水准的主要有三星的Exynos 7420,高通的Snapdragon 820,工艺已经在20 nm以下,主频达到2.2 GHz以上,性能对于主流移动应用来说已经过剩。而观之GPU,Snapdragon 820详情还不知道,上一代使用的高通Adreno430,频率为800 MHz;Exynos 7420用的是Mali-T760MP8,频率为772 MHz,与桌面段GPU比起来就相形见拙了。因此,大型3D手游都得针对特定的GPU进行性能优化,不同的GPU使用不同的数据包。然而Android端的专业的三维地图引擎却几乎没有,部分是从其他平台移植过来的,未经优化就直接使用GPU进行图形运算,性能比较低下。传统的Web3D解决方案主要依赖于Flash、Java3D以及Silverlight等技术[9],但是存在难以支持Web端CPU加速,难以进行大规模复杂3D场景的渲染。WebGL通过结合JavaScript和OpenGL ES2.0提供了一种类似于OpenGL的API,能有效地解决现有Web交互式三维动画对插件的依赖和不支持GPU加速问题[10]

本文提出基于HTML5和WebGL标准的Web3D引擎来实现三维地球,所有的数据首先经过CPU,CPU能运算的都会分配给CPU运算,只有极少数图形处理业务会留给GPU。而在三维地球中,由于没有复杂的三维场景,需要GPU运算的数据非常少,所以既可以保持良好的性能,还能保持足够的可移植性。

4 结束语

移动GIS和三维GIS都是GIS领域发展的趋势。本文以最新的Web3D技术为支撑,实现三维地球,根据天地图的投影方式和其他参数,确定三维地球上的位置和天地图上位置的对应关系和切片行列号,实现实时瓦片的读取与贴合,并以Javascript命令为桥梁联通Android和Web页面,最终将三维天地图流畅地展示在Android平台,为Android平台的三维GIS实现提供了一个新的具有高度可移植性的解决方案。

参考文献
[1] 乔朝飞. 促进基础地理信息应用的若干思考[J]. 测绘通报,2014,(5) : 127–129.
Qiao Chaofei. Some Thoughts of Improving Application of Fundamental Geographic Information[J]. Bulletin of Surveying and Mapping,2014,(5) : 127–129.
[2] 公磊, 周聪. 基于 Android 的移动终端应用程序开发与研究[J]. 计算机与现代化,2008,(8) : 85–89.
Gong Lei, Zhou Cong. Development and Research of Mobile Termination Application Based on Android[J]. Computer and Modernization,2008,(8) : 85–89.
[3] 许颖, 魏峰远. 移动 GIS 关键技术及开发模式探讨[J]. 测绘与空间地理信息,2008,31(4) : 45–47.
Xu Ying, Wei Fengyuan. Discussion on Key Technol ogies and Developing Mode of Mobile GIS[J]. Geomatics & Spatial Information Technology,2008,31(4) : 45–47.
[4] 李鑫, 李琦. 空间信息系统移动终端设计与实现技术[J]. 测绘科学,2006,31(1) : 103–105.
Li Xin, Li Qi. The Design and Realization of the Spatial Information Acquisition System Based on Mobile GIS[J]. Science of Surveying and Mapping,2006,31(1) : 103–105.
[5] 吴合义, 黄宝香. 基于AJAX的三维地图引擎设计与实现[J]. 地理空间信息,2014,12(2) : 161–163.
Wu Heyi, Huang Baoxiang. Design and Realization of 3D Map Engine Based on AJAX Technology[J]. Geospatial Information,2014,12(2) : 161–163.
[6] 罗安平, 魏斌, 杨春成, 等. Android 平台的多尺度地理信息三维显示技术[J]. 测绘科学技术学报,2014,31(1) : 107–110.
Luo Anping, Wei Bin, Yang Chuncheng, et al. Multi-Scale Three-Dimensional Display of Geographic Information Based on Android[J]. Journal of Geomatics Science and Technology,2014,31(1) : 107–110.
[7] 左伟, 王俊友, 赵海云, 等. 基于 WebGIS 的网络地理信息资源获取与坐标投影转换技术研究——以天地图为例[J]. 测绘通报,2015,(4) : 122–124.
Zuo Wei, Wang Junyou, Zhao Haiyun, et al. On Network Geoinformation Resources Acquisition and Coordinate ProjectionTransformation Technology Based on WebGIS—Taking Tianditu as an Example[J]. Bulletin of Surveying and Mapping,2015,(4) : 122–124.
[8] 陈超, 王亮, 闫浩文, 等. 一种基于 NoSQL 的地图瓦 片数据存储技术[J]. 测绘科学,2013,38(1) : 142–143.
Chen Chao, Wang Liang, Yan Haowen, et al. A Map Tiles Data Storage Technology Based on NoSQL[J]. Science of Surveying and Mapping,2013,38(1) : 142–143.
[9] 熊文, 熊淑华, 孙旭, 等. AJAX技术在 Web2. 0 网站设计中的应用研究[J]. 计算机技术与发展,2012,22(3) : 145–148.
Xiong Wen, Xiong Shuhua, Sun Xu, et al. Application Research of AJAX in Web2[J]. Computer Technology and Development,2012,22(3) : 145–148.
[10] 殷周平, 吴勇. 基于 WebGL 和 AJAX 的 Web3D 应用研究——以在线 3D 协作交互式设计为例[J]. 安庆师范学院学报(自然科学版),2013,19(1) : 58–61.
Yin Zhouping, Wu Yong. Web3D Applied Research Based on WebGL and AJAX—Interactive Online 3D Collaborative Design[J]. Journal of Anqing Teachers College(Natural Science Edition),2013,19(1) : 58–61.