7

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

组装模型参考图像

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

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

例如

  • 原点地理坐标 (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) 坐标 >> 地理坐标

建议/帮助解决问题。

4

2 回答 2

3

编辑:由于搜索引擎似乎正在派人在这里寻找笛卡尔到制图的转换,我将在此处提供答案。

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

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,您将使用相应的函数来创建然后应用该转换。

于 2015-10-29T16:54:11.150 回答
2

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]

于 2020-09-30T07:17:53.390 回答