Cesium学习笔记11——坐标量测
点击球面位置,获取经纬度坐标和高程。
代码:
1 var annotations; 2 function axToolCoordinate(layer) { 3 var handler=new Cesium.ScreenSpaceEventHandler(viewer.canvas); 4 annotations=viewer.scene.primitives.add( new Cesium.LabelCollection()); 5 handler.setInputAction(function (evt){ 6 var pickedObject=viewer.scene.pick(evt.position); 7 if(viewer.scene.pickPositionSupported && Cesium.defined(pickedObject)){ 8 var cartesian=viewr.scene.pickPosition(evt.position); 9 if(Cesium.defined(cartesian)) 10 { 11 var cartographic=Cesium.Cartographic.fromCartesian(cartesian); 12 var lng=Cesium.Math.toDegrees(cartographic.longitude); 13 var lat=Cesium.Math.toDegrees(cartographic.latitude); 14 var height=cartographic.height; 15 annotate(cartesian,lng,lat,height); 16 } 17 } 18 else{ 19 var ray=viewer.camera.getPickRay(evt.position); 20 var cartesian=viewer.scene.globe.pick(ray,viewer.scene); 21 if(Cesium.defined(cartesian)){ 22 var cartographic=Cesium.Cartographic.fromCartesian(cartesian); 23 var lng=Cesium.Math.toDegrees(cartographic.longitude); 24 var lat=Cesium.Math.toDegrees(cartographic.latitude); 25 var height=cartographic.height; 26 annotate(cartesian,lng,lat,height); 27 } 28 } 29 },Cesium.ScreenSpaceEventType.LEFT_CLICK); 30 31 handler.setInputAction(function (){ 32 viewer.entities.removeAll(); 33 annotations.removeAll(); 34 },Cesium.ScreenSpaceEventType.RIGHT_CLICK); 35 } 36 37 function createPoint(worldPostion){ 38 var point = viewer.entities.add({ 39 position:worldPostion, 40 point:{ 41 color:Cesium.Color.CRIMSON, 42 pixelSize:9, 43 outlineColor:Cesium.Color.ALICEBLUE, 44 outlineWidth:2, 45 disableDepthTestDistance:1000 46 } 47 }); 48 } 49 50 function annotate(cartesian,lng,lat, height){ 51 createPoint (cartesian); 52 annotations.add({ 53 position:cartesian, 54 text: 55 'Lon:'+lng.toFixed(5)+'\u00B0'+ 56 '\nLat:'+lat.toFixed(5)+'\u00B0'+ 57 '\nHeight:'+height.toFixed(2)+'m', 58 showBackground:true, 59 font:'22px monospace', 60 horizontalOrigin: Cesium.HorizontalOrigin.LEFT, 61 verticalOrigin: Cesium.VerticalOrigin.Bottom, 62 disableDepthTestDiatane:Number.POSITIVE_INFINITY 63 }); 64 }
因为handle的作用域问题,为了实现其他的鼠标事件,需要将窗口事件管理器变量提前,增加清除事件命令,并修改代码:
1 var annotations; 2 function axToolCoordinate(layer) { 3 if(handler==null){ 4 handler=new Cesium.ScreenSpaceEventHandler(viewer.canvas); 5 } 6 7 annotations=viewer.scene.primitives.add( new Cesium.LabelCollection()); 8 handler.setInputAction(function (evt){ 9 var pickedObject=viewer.scene.pick(evt.position); 10 if(viewer.scene.pickPositionSupported && Cesium.defined(pickedObject)){ 11 var cartesian=viewr.scene.pickPosition(evt.position); 12 if(Cesium.defined(cartesian)) 13 { 14 var cartographic=Cesium.Cartographic.fromCartesian(cartesian); 15 var lng=Cesium.Math.toDegrees(cartographic.longitude); 16 var lat=Cesium.Math.toDegrees(cartographic.latitude); 17 var height=cartographic.height; 18 annotate(cartesian,lng,lat,height); 19 } 20 } 21 else{ 22 var ray=viewer.camera.getPickRay(evt.position); 23 var cartesian=viewer.scene.globe.pick(ray,viewer.scene); 24 if(Cesium.defined(cartesian)){ 25 var cartographic=Cesium.Cartographic.fromCartesian(cartesian); 26 var lng=Cesium.Math.toDegrees(cartographic.longitude); 27 var lat=Cesium.Math.toDegrees(cartographic.latitude); 28 var height=cartographic.height; 29 annotate(cartesian,lng,lat,height); 30 } 31 } 32 },Cesium.ScreenSpaceEventType.LEFT_CLICK); 33 34 handler.setInputAction(function (){ 35 viewer.entities.removeAll(); 36 annotations.removeAll(); 37 },Cesium.ScreenSpaceEventType.RIGHT_CLICK); 38 } 39 40 function createPoint(worldPostion){ 41 var point = viewer.entities.add({ 42 position:worldPostion, 43 point:{ 44 color:Cesium.Color.CRIMSON, 45 pixelSize:9, 46 outlineColor:Cesium.Color.ALICEBLUE, 47 outlineWidth:2, 48 disableDepthTestDistance:1000 49 } 50 }); 51 } 52 53 function annotate(cartesian,lng,lat, height){ 54 createPoint (cartesian); 55 annotations.add({ 56 position:cartesian, 57 text: 58 'Lon:'+lng.toFixed(5)+'\u00B0'+ 59 '\nLat:'+lat.toFixed(5)+'\u00B0'+ 60 '\nHeight:'+height.toFixed(2)+'m', 61 showBackground:true, 62 font:'22px monospace', 63 horizontalOrigin: Cesium.HorizontalOrigin.LEFT, 64 verticalOrigin: Cesium.VerticalOrigin.Bottom, 65 disableDepthTestDiatane:Number.POSITIVE_INFINITY 66 }); 67 }
清除绘制:
function destroy() { viewer.entities.removeAll(); if (handler) { handler.destroy(); handler = null; } }
作者:太一吾鱼水
文章未经说明均属原创,学习笔记可能有大段的引用,一般会注明参考文献。
欢迎大家留言交流,转载请注明出处。