我有一个带有纬度/长度和高度的飞行路径,我需要将其转换为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,但似乎无法找到相同的SO问题以供参考。
我通过在给定位置手动累加地球半径+飞行路径的高度并查看这是否等于我的x,y,z向量的长度来检查我的代码是否正确。
例如:x,y,z (3689.2472215653725,3183.2401988117012,13306.90338789763)
当我给出我的功能时输出
-93.028,44.6942,7800
lat,long,elevation
有人能指点我找到合适的js代码来完成这个转换吗?
答案 0 :(得分:1)
Yavascript 本身没有任何问题。但是,您的方程式不正确。您正在寻找从Lat / Long / Alt转换为Spherical(又名Cartesian),which was answered here。
所以你可以在上面改写:
function polarToCartesian(latitude, longitude, elevation){
const x = math.cos(latitude) * math.cos(longitude) * elevation;
const y = math.cos(latitude) * math.sin(longitude) * elevation;
const z = math.sin(latitude) * elevation;
return [x, y, z];
}
答案 1 :(得分:1)
您应该使用Cesium的内置功能。请参阅Cartesian3.fromDegrees
和Cartesian3.fromDegreesArray
。
例如:
select * from transactions_by_user_and_day where user_id = ? and created_date_time > ?;
注意结果将如铯所预期的那样:以米为单位,而不是千米。这也考虑了椭球的形状,默认为WGS84(地球不是一个完美的球体,正如你的函数所假设的那样)。