极坐标到笛卡尔坐标不能输出正确的数据

时间:2016-09-06 16:40:12

标签: javascript node.js coordinates cesium cartesian

我有一个带有纬度/长度和高度的飞行路径,我需要将其转换为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代码来完成这个转换吗?

2 个答案:

答案 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.fromDegreesCartesian3.fromDegreesArray

例如:

select * from transactions_by_user_and_day where user_id = ? and created_date_time > ?;

注意结果将如铯所预期的那样:以米为单位,而不是千米。这也考虑了椭球的形状,默认为WGS84(地球不是一个完美的球体,正如你的函数所假设的那样)。