基于Skyline与ArcGIS Server的二三维联动功能实现主要利用WEB技术、ArcGIS for JavaScript、Skyline 二次开发以及ArcGIS 10.1 桌面工具。 利用ArcGIS桌面工具制作地图文档、发布地图服务并进行地图切片,这样就得到了实验用的二维电子地图数据。地图文档和切片的质量直接影响着二三维联动功能实现的效果。功能实现过程中,主要有Skyline三维平台的鼠标滚轮、鼠标抬起事件以及二维电子地图的鼠标拖拽、鼠标按下和范围改变激发的事件。
在开启二三维联动时,调用功能入口函数,开启三维场景的2D模式,设定正北方向,完成二维电子地图初始化,并绑定相应的事件。通过设定一个变量来判断是二维联动三维还是三维联动二维,从而运行相应的核心方法。二维联动三维主要是通过鼠标按下、拖拽事件对控制变量赋值,从而在鼠标拖拽、滚轮缩放动作后激发的地图范围改变时运行核心方法。在核心方法中完成实时获取电子地图的当前中心点位置,并依此设定三维场景摄像头的位置。这个过程需要实现平面坐标到球面坐标的转换,也就是墨卡托投影下的坐标转换为经纬度坐标。经过多次试验,摄像头的高度设为当前二维地图层级比例的六分之一比较合适。三维联动二维是主要是通过在三维场景的滚轮事件、鼠标左键抬起事件中给控制变量赋值,并同时调用一个核心方法。核心方法完成将电子地图的中心点坐标设为当前浏览的三维场景的中心点坐标,并计算三维场景的显示比例来确定电子地图的显示层级。三维场景的显示比例是通过当前三维场景在3D窗口的宽度与其所展现的实际的三维地球上的距离的比值确定。这样就成功实现了二三维的互动。
最后,在关闭联动功能时,需要关闭电子地图,同事开启三维场景的3D模式并取消鼠标滚轮和鼠标左键抬起事件。
试验结果如下:
图(一)
图(二)