三维场景控件(SceneControl) 和三维场景(Scene)
SuperMap iClient3D 8C for Plugin 的三维场景控件(SceneControl)是一个 ActiveX 控件,它可以实现控件和脚本库版本的自动检测,提示用户进行版本更新,并提供下载新版本的地址信息的功能。在Web页面中与 SceneControl 对象对应的是一个 [div] 对象,通过对 SceneControl 对象进行的装载三维场景(Scene),获取或者设置对三维场景的操作(SceneAction),响应鼠标和键盘消息(EventObject),获取 SuperMap iServer Java 6R 提供的场景服务器信息(SceneServicesList)和图层服务信息(Layer3DServicesList)等操作都可以在 [div] 对象中得以反应。
一个三维场景控件可以承载一个三维场景,如果需要显示其他三维场景时必须关闭当前三维场景。如果用户想查看现在服务器提供的所有数据服务列表,便可以通过三维场景控件来获取场景服务列表信息 SceneServicesList ,该服务列表中包含了每个场景服务的信息 SceneServiceInfo,其中 SceneServiceInfo 包括场景服务名称和场景服务的服务器地址。当选定一个场景以后,通过 Layer3DServicesList 获取指定场景中服务端发布的全部三维图层集合服务列表及其三维图层集合中的各个图层的信息 Layer3DServiceInfo,利用 Layer3DServiceInfo 记录的图层信息便能实现加载图层。
由于在三维场景控件中默认了一个 Pan 漫游操作,因此创建一个三维场景控件后就可以通过鼠标或键盘进行地球的漫游操作了。所有三维可视化操作都在三维场景控件中进行,该控件一次只能完成一个操作。
当创建一个三维场景控件时会默认存在一个三维场景,在默认加载的三维场景中全部场景元素,如雾、网格、星空、导航控件等都可见。其中导航控件可以实现漫游、缩放、三维场景倾斜和绕场景中心旋转的操作。如图1所示,为一个新建的三维场景控件,三维窗口中默认存在一个三维场景。
图1 默认三维场景窗口
三维场景的主体是一个半径为 6378137 米的模拟地球的三维球体。该球体具有地理参考坐标,可通过经纬度进行定位,并且可以通过覆盖在球体表面的经纬网格方便地浏览;同时,使用全球的遥感影像图作为背景覆盖在球体表面,增强三维球体模拟的逼真性;除此之外,三维场景还模拟了地球所处的环境,包括:宇宙的星空,地球的大气环境,地球表面的雾环境等,这些在三维场景控件中的界面元素的可见性由 SceneOption 控制,界面元素还包括经纬网、控制操作面板、比例尺、进度条等。
一个三维场景具有一个控制飞行的对象——FlyingOperator,与 FlyingOperator 紧密相关的是相机(Camera)和飞行模式(FlyingMode)。通过设置相机的经纬度、相机高度等参数来控制相机对球体的观测角度、观测方位和观测范围,从而以不同的视角呈现地球的不同方位。当 FlyingOperator 获取到相机指定方位后,便会以指定的飞行模式(FlyingMode)飞行到指定的地球位置。
三维场景的主要任务就是装载二维和三维地图数据。现阶段 SuperMap iClient3D 8C for Plugin 能够加载三维图层(Layer3D)和地形图层(TerrainLayer)。一个三维场景中可以包含多个 Layer3D 类型的图层和地形图层 TerrainLayer,它们分别由三维图层集合 Layer3Ds 和地形图层集合 TerrainLayers 管理。