在三维地图窗口中单机地图某一点,如何获取单机位置的经纬度?
/**
* Cesium.ScreenSpaceEventHandler
* 处理用户输入事件。可以添加自定义函数,以便在用户输入时执行。
*/
var handler = new Cesium.ScreenSpaceEventHandler(viewer.canvas);
/**
* ScreenSpaceEventHandler.setInputAction(action, type, modifier)
* 设置要在输入事件上执行的函数。
* @action Function to be executed when the input event occurs.
* @type The ScreenSpaceEventType of input event.
* @modifier A KeyboardEventModifier key that is held when a type event occurs.
*
* Cesium.ScreenSpaceEventType
* 此枚举类型用于对鼠标事件进行分类:向下、向上、单击、双击、按住按钮时移动和移动。
*
* Cesium.ScreenSpaceEventType.LEFT_CLICK
* 表示鼠标左键单击事件。
*/
handler.setInputAction(function (event) {
//获取位置的弧度表示
var pRadians = earth.pickPosition(event.position);
//将弧度坐标转换为Cartesian3世界空间直角坐标系坐标
var pCartesian3 = Cesium.Cartesian3.fromRadians(pRadians[0],pRadians[1],pRadians[2])
//Cartesian3坐标系转换为Cartographic
var pCartographic = Cesium.Cartographic.fromCartesian(cartesian3Position);
//经度
var longitude = Cesium.Math.toDegrees(pCartographic.longitude);
//纬度
var latitude = Cesium.Math.toDegrees(pCartographic.latitude);
//读完官方文档之后我发现,直接这样就行了,因为earth.pickPosition返回的其实就是一个数组位置,形式如 [1.0, 0.5, 50.0],表示[经度, 纬度, 高度],经纬度以弧度为单位,高度以米为单位
var longitude = Cesium.Math.toDegrees(pRadians[0]);
var latitude = Cesium.Math.toDegrees(pRadians[1]);
}, Cesium.ScreenSpaceEventType.LEFT_CLICK)
想要详细了解这些Cesium函数的使用,可以参考cesium的官方文档。
- Cesium.ScreenSpaceEventHandler
- Cesium.ScreenSpaceEventType
- Cesium.Cartesian3
- Cesium.Cartographic
- Cesium.Math.toDegrees