Javascript 如何将x、y、z转换为以铯为单位的经度、纬度、高度?

Javascript 如何将x、y、z转换为以铯为单位的经度、纬度、高度?,javascript,math,cesium,Javascript,Math,Cesium,使用three.js库,我组装了一个设计(工厂)。该设计包含许多较小的模型,这些模型从原点(0,0,0)以(x,y,z)为参考位置。在下面的链接中附加了示例屏幕截图 现在,我想将单个模型及其自身位置加载到铯中。当我尝试直接将位置(x、y、z)转换为(北、东、上)加载时,结果与预期不符。所有的模型都是分散的 我试图实现的功能是,基于一些原点(lon,lat,alt),我应该将模型定位到铯中,参考(x,y,z)相对于铯坐标(lon,lat,alt) 例如 原点地理坐标(ori_lon,ori_l

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

现在,我想将单个模型及其自身位置加载到铯中。当我尝试直接将位置(x、y、z)转换为(北、东、上)加载时,结果与预期不符。所有的模型都是分散的

我试图实现的功能是,基于一些原点(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.9126.2617.7)

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

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

我在下面的文章中尝试了将(x,y,z)转换为(long,lat,alt)并带有一些原点(long,lat,alt),但没有成功:(


解决此问题的建议/帮助。

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

该函数是执行此转换的最简单方法。请注意,它将返回一个
制图
,以弧度表示,而不是度。高度以米为单位返回

var cartographic = Cesium.Cartographic.fromCartesian(cartesian);
console.log(
    'lon ' + Cesium.Math.toDegrees(cartographic.longitude) + ', ' +
    'lat ' + Cesium.Math.toDegrees(cartographic.latitude) + ', ' +
    'alt ' + cartographic.height);
原始答案:如果您在此处阅读原始问题的详细信息,提问者试图在LLA空间中添加坐标,这是不正确的。我在此处的原始答案解释了如何将两者转换为笛卡尔空间,并在那里添加结果

这可以通过以下方式完成


根据坐标系偏移量的不同,它可能需要旋转才能应用于全局笛卡尔空间。例如,如果它是东北向上的,您可以使用创建并应用该变换。

笛卡尔坐标系3到longlat,以防有人需要

函数到degrees(Cartesian3PO){
设pos=来自笛卡尔(笛卡尔3pos)的铯制图
返回[pos.longitude/Math.PI*180,pos.latitude/Math.PI*180]
}
控制台日志(toDegrees({
x:-1681498.1800000381,
y:4576516.394998055,
z:4098410.649998016

})) // [110.17428132202518, 40.23966923800238]
你的代码从LLA到XYZ,问题是从XYZ到LLA。是的,最初的提问者试图走错方向,将x/y/z偏移量转换为LLA,目的是偏移LLA空间中的模型,这是不正确的。我的回答通过将LLA位置转换为笛卡尔坐标3,并在那里添加笛卡尔偏移量,这是什么他的案例需要t。铯确实包含这两种转换,如果您愿意,我可以编辑我的答案,以包含其他方式的详细信息。要减少困惑:要变得更困惑:
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);