如何根據經緯度計算地面上某點在XYZ空間直角坐標系中的坐標

/**
* @param r: number 到地心的距離
* @param lon: number 經度
* @param lat: number 緯度
* @return {[number, number, number]}
*/
getXYZByLonLat = (r, lon, lat) => {
const {sin, cos, PI} = Math;
const lonRadian = lon / 180 * PI;
const latRadian = lat / 180 * PI;
const y = r * sin(latRadian); // 在經線圈平面上, 計算y
const rOnEquatorialPlane = r * cos(latRadian); // 在赤道面上, 計算r的投影距離
const x = rOnEquatorialPlane * sin(lonRadian); // 在俯視圖中, 計算x
const z = rOnEquatorialPlane * cos(lonRadian); // 在俯視圖中, 計算z
/**
x = R * cos(lat) * sin(lon)
y = R * sin(lat)
z = R * cos(lat) * cos(lon)
*/
return [x, y, z];
};