cesium 屏幕坐标和经纬度互转

1. 屏幕坐标到经纬度的转换

screenToGeoCoordinates(screenX, screenY, viewer)
{
  let ellipsoid = viewer.scene.globe.ellipsoid
  // 使用camera.pickEllipsoid来获取与屏幕坐标相交的点
  let cartesian = viewer.camera.pickEllipsoid(new Cesium.Cartesian2(screenX, screenY), ellipsoid)

  if (!cartesian)
  {
    console.log('无法在屏幕坐标处找到交点')
    return null
  }

  // 将笛卡尔坐标转换为经纬度
  let cartographic = Cesium.Cartographic.fromCartesian(cartesian)
  let latitude = Cesium.Math.toDegrees(cartographic.latitude)
  let longitude = Cesium.Math.toDegrees(cartographic.longitude)

  return { latitude: latitude, longitude: longitude }
}

2. 经纬度到屏幕坐标的转换

geoToScreenCoordinates(latitude, longitude, viewer)
{
  // 创建经纬度对应的Cartographic对象
  let cartographic = Cesium.Cartographic.fromDegrees(longitude, latitude)

  // 将经纬度转换为笛卡尔坐标
  let cartesian = Cesium.Cartesian3.fromRadians(cartographic.longitude, cartographic.latitude, cartographic.height || 0)

  // 将笛卡尔坐标转换为屏幕坐标
  let screenPosition = viewer.scene.cartesianToCanvasCoordinates(cartesian)

  return { x: screenPosition.x, y: screenPosition.y }
}

使用示例

屏幕坐标转经纬度:
var screenX = 100;
var screenY = 200;

var geoCoordinates = screenToGeoCoordinates(screenX, screenY, viewer);

if (geoCoordinates) {
    console.log("Latitude: " + geoCoordinates.latitude);
    console.log("Longitude: " + geoCoordinates.longitude);
}
经纬度转屏幕坐标:
var latitude = 40.0;
var longitude = -75.0;

var screenCoordinates = geoToScreenCoordinates(latitude, longitude, viewer);

console.log("Screen X: " + screenCoordinates.x);
console.log("Screen Y: " + screenCoordinates.y);

在这里插入图片描述

说明

  • camera.pickEllipsoid 是用于从屏幕坐标获取与地球椭球体相交的点(即获取实际的地理位置),所以它可以有效替代 Cesium.Intersecting
  • 如果点击的屏幕坐标没有与地球表面相交(比如在海洋或高空),它会返回 null,所以我们需要检查返回值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值