繁体   English   中英

如何将 x、y、z 转换为 Cesium 中的经度、纬度、高度?

[英]How to convert x, y, z to longitude, latitude, altitude in Cesium?

使用three.js库我已经组装了一个设计(植物)。 该设计包含许多较小的模型,这些模型具有从原点 (0,0,0) 在 (x, y, z) 中的位置参考。 在以下链接中附上了示例屏幕截图

组装模型参考图像

现在我想将具有自己位置的单个模型加载到 Cesium 中。 当我尝试加载直接将位置 (x, y, z) 转换为 (north, Eastern, up) 时,结果并不如预期。 所有的模型都是分散的。

我试图实现的功能是,基于一些原点(lon,lat,alt)点,我应该将模型定位到铯中,参考(x,y,z)相对于铯坐标(lon,lat,alt )

例如

  • 原点地理坐标 (ori_lon, ori_lat, ori_alt) => (-106.690647, 36.806761, 0)

  • 模型坐标 (m_x, m_y, m_z) => (-150.9, 126.26, 217.7)

  • 铯的期望坐标:(ori_lon + m_x、ori_lat + m_y、ori_alt + m_z)

或一些算法来实现这一点。

我已尝试使用以下文章将 (x, y, z) 转换为具有某些来源 (long, lat, alt) 的 (long, lat, alt),但没有成功:(

(x, y, z) 坐标 >> 地理坐标

解决问题的建议/帮助。

编辑:由于搜索引擎似乎将人们发送到这里寻找笛卡尔到制图的转换,我将在这里提供一个答案。

Cartographic.fromCartesian函数是执行此转换的最简单方法。 请注意,它将返回以弧度而非度数表示的Cartographic 高度以米为单位返回。

var cartographic = Cesium.Cartographic.fromCartesian(cartesian);
console.log(
    'lon ' + Cesium.Math.toDegrees(cartographic.longitude) + ', ' +
    'lat ' + Cesium.Math.toDegrees(cartographic.latitude) + ', ' +
    'alt ' + cartographic.height);

原始答案:如果您在此处阅读原始问题的详细信息,则提问者试图在 LLA 空间中将坐标添加在一起,这是不正确的。 我在这里的原始答案解释了如何将它们都转换为笛卡尔空间并在那里添加结果。

这可以通过Cesium.Cartesian3.fromDegrees来完成。

var position = Cesium.Cartesian3.fromDegrees(-106.690647, 36.806761, 0);
var offset = new Cesium.Cartesian3(-150.9, 126.26, 217.7);
Cesium.Cartesian3.add(position, offset, position);

根据坐标系offset的不同,它可能需要旋转才能应用于全局笛卡尔空间。 例如,如果它是 East-North-Up,您将使用相应的函数来创建并应用该转换。

Cartesian3 到 longlat,以防有人需要

 function toDegrees(cartesian3Pos) { let pos = Cesium.Cartographic.fromCartesian(cartesian3Pos) return [pos.longitude / Math.PI * 180, pos.latitude / Math.PI * 180] } console.log(toDegrees({ x: -1681498.1800000381, y: 4576516.394998055, z: 4098410.649998016 })) // [110.17428132202518, 40.23966923800238]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM