我有一 strip 有纬度/经度和海拔的飞行路径,我需要将其转换为 cesium.js 的 Cartesin X,Y,Z。 我在尝试转换它时遇到了困难,因为我似乎没有从我的函数中得到正确的结果。
var R = 6371;
function polarToCartesian(latitude, longitude, elevation){
x = (R+elevation) * math.cos(latitude) * math.cos(longitude);
y = (R+elevation) * math.cos(latitude) * math.sin(longitude);
z = (R+elevation) * math.sin(latitude);
var ar = [x,y,z];
return ar;
}
我要么没有正确的极坐标到笛卡尔公式,要么没有正确的地球半径。我在某个地方发现我的半径应该是 6371 但似乎找不到相同的问题供引用。
我通过手动添加给定位置的地球半径+飞行路径的高度来部分检查我的代码是否正确,并查看这是否等于我的 x,y,z 向量的长度。
例如:x,y,z (3689.2472215653725,3183.2401988117012,13306.90338789763)
当我给我的函数这个时输出
-93.028,44.6942,7800
纬度、经度、海拔
有人能指点我找到正确的js代码来完成这个转换吗?
最佳答案
为此,您应该使用 Cesium 的内置函数。请参阅Cartesian3.fromDegrees
和 Cartesian3.fromDegreesArray
.
例如:
var result = Cesium.Cartesian3.fromDegrees(latitude, longitude, elevation);
请注意,结果将如 Cesium 预期的那样:以米为单位,而不是公里。这还考虑了椭圆体的形状,默认值为 WGS84 (正如您的函数所假设的那样,地球并不是一个完美的球体)。
关于javascript - 极坐标到笛卡尔坐标函数未输出正确的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39353960/