背景知识
点、线、面以及文字的实时绘制是GIS很重要的一个功能,是用户对感兴趣区域标注的业务需要。同时Cesium提供了点、线(多段线)、面及文字(label)绘制的接口,绘制方式总共有两种,一种是通过Entity实体的方式,一种是通过Primitives的方式。第一种使用较为简单,是在Primitives基础上进行了封装;第二种则更加贴近WebGL底层,语法更复杂但是绘制效率更高效率。鉴于实时绘制数据量并不大,不需要使用复杂高效的方法,第一种方法完全适用。
Cesium通过ScreenSpaceEventHandler方法添加鼠标监听,包括鼠标的移动、点击等,同时会把鼠标的位置信息以回调函数方式返回。通过监听用户鼠标状态实现矢量图形及文字注记的位置记录。
CallbackProperty监听:当变量变化时触发该监听,通过监听鼠标拾取坐标的变化实现动态绘制。
代码实现
记录点位
var location ={
latitude:0,
longitude:0,
height:0,
endPosition:null,
cartesian :null};
viewer.screenSpaceEventHandler.setInputAction(functiononMouseMove(movement) {//记录移动位置
location.endPosition =viewer.scene.pickPosition(movement.endPosition);
},Cesium.ScreenSpaceEventType.MOUSE_MOVE);
viewer.screenSpaceEventHandler.setInputAction(functiononLeftClick(movement) {var cartesian =viewer.scene.pickPosition(movement.position);//记录点击位置
location.cartesian =cartesian;var cartographic =Cesium.Cartographic.fromCartesian(cartesian);
location.latitude=Cesium.Math.toDegrees(cartographic.latitude);
location.longitude=Cesium.Math.toDegrees(cartograph