cesium 三维点击地图获取经纬度坐标

  • 根据鼠标点击屏幕位置获取Cartesian3坐标
  • 将Cartesian3解析为Cartographic弧度坐标
  • 弧度坐标转换为经纬度坐标

// 方法1. 获取椭球体表面的经纬度坐标,
var handler = new Cesium.ScreenSpaceEventHandler(scene.canvas);
handler.setInputAction(function(evt) {
    var cartesian = viewer.camera.pickEllipsoid(evt.position,viewer.scene.globe.ellipsoid);
    var cartographic = Cesium.Cartographic.fromCartesian(cartesian);
    var lng = Cesium.Math.toDegrees(cartographic.longitude);//经度值
    var lat = Cesium.Math.toDegrees(cartographic.latitude);//纬度值
    var mapPosition = {x:lng,y:lat,z:cartographic.height};//cartographic.height的值始终为零。
}, Cesium.ScreenSpaceEventType.LEFT_CLICK);

//方法2.  获取地形表面的经纬度高程坐标
var handler = new Cesium.ScreenSpaceEventHandler(scene.canvas);
handler.setInputAction(function(evt) {
    var ray = viewer.camera.getPickRay(evt.position);
    var cartesian = viewer.scene.globe.pick(ray,viewer.scene);
    var cartographic = Cesium.Cartographic.fromCartesian(cartesian);
    var lng = Cesium.Math.toDegrees(cartographic.longitude);//经度值
    var lat = Cesium.Math.toDegrees(cartographic.latitude);//纬度值
    var mapPosition={x:lng,y:lat,z:cartographic.height};//cartographic.height的值为地形高度。
}, Cesium.ScreenSpaceEventType.LEFT_CLICK);

//方法3.  获取模型或者其他要素
var handler = new Cesium.ScreenSpaceEventHandler(scene.canvas);
handler.setInputAction(function(evt) {
    var cartesian = viewer.scene.pickPosition(evt.position);
    var cartographic = Cesium.Cartographic.fromCartesian(cartesian);
    var lng = Cesium.Math.toDegrees(cartographic.longitude);//经度值
    var lat = Cesium.Math.toDegrees(cartographic.latitude);//纬度值
    var mapPosition={x:lng,y:lat,z:cartographic.height};//
}, Cesium.ScreenSpaceEventType.LEFT_CLICK);

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
cesium是一款开源的JavaScript库,用于创建高度交互式的三维地球浏览器应用程序。当你需要将经度坐标转换为屏幕坐标(像素坐标)时,在Cesium中,这个过程通常涉及到地图投影、视口变换和屏幕空间转换。 首先,你需要获取经度对应的地理坐标(lon, lat, height)。然后,你可以通过以下步骤将这个地理坐标转换为屏幕坐标: 1. **地图投影**:Cesium提供`MercatorProjection`或自定义投影,将经纬度映射到一个平面,比如WGS84坐标系统下的墨卡托投影。 2. **视口转换**:从投影平面上得到的点,需要应用当前地图视图的中心、缩放比例以及偏移(视口矩阵),将其转换到视口内的空间。 3. **屏幕坐标**:最后,使用`projectToPixel`函数将视口内的点转换成屏幕空间的像素坐标,它会考虑浏览器窗口大小和CSS像素密度等因素。 下面是一个简化的伪代码示例: ```javascript const lon = ...; // 给定的经度 const lat = ...; // 给定的纬度 // 创建MercatorProjection实例 const projection = new Cesium.MercatorProjection(); // 获取地理坐标 const geoCoord = projection.project(new Cesium.Cartesian3(lon, lat, 0)); // 获取视口信息 const viewport = viewer.camera.frustum; const screenCoord = Cesium.Cartesian2.fromElements( viewport.project(geoCoord).x, viewport.height - viewport.project(geoCoord).y, viewer.scene.canvas ); console.log(screenCoord); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值