网上有很多关于cesium坐标系的系统介绍,但是在实际开发中,并不能对号入座,本人也测绘出身也搞得一头雾水。因此写下在对cesium开发中坐标系的理解。
初学者最容易接触到的就是事件,因此以事件为入口来讲述坐标系
Pick----屏幕坐标 Cartesian----世界坐标 cartographic-----地理坐标(弧度)
Point----经纬度坐标
事件回调的坐标系是屏幕坐标系
handler = new Cesium.ScreenSpaceEventHandler(scene.canvas); handler.setInputAction(function(movement) { var cartesian = viewer.camera.pickEllipsoid(movement.endPosition, scene.globe.ellipsoid); if (cartesian) { var cartographic = Cesium.Cartographic.fromCartesian(cartesian); var longitudeString = Cesium.Math.toDegrees(cartographic.longitude).toFixed(2); var latitudeString = Cesium.Math.toDegrees(cartographic.latitude).toFixed(2); console.log(longitudeString) } else { } }, Cesium.ScreenSpaceEventType.MOUSE_MOVE);
即movement中的坐标是屏幕坐标系;
屏幕坐标系转向世界坐标系---即3857投影坐标系
var cartesian = viewer.camera.pickEllipsoid(pick, viewer.scene.globe.ellipsoid);
通过API可以查到,第一个参数是屏幕坐标系的坐标,第二个参数是椭球体,默认为84;返回三维的世界坐标系
世界坐标系-弧度坐标系 投影坐标系----大地坐标系转换(弧度制)
var cartographic = Cesium.Cartographic.fromCartesian(cartesian);
弧度制坐标转为经纬度坐标
var latitudeString = Cesium.Math.toDegrees(cartographic.latitude).toFixed(2);