2016-09-06 2 views
1

У меня есть траектория полета с лат/длиной и высотой, и мне нужно преобразовать это в корзину X, Y, Z для цезия.js. Я бегу в стену, пытаясь преобразовать это, потому что я, кажется, не получаю правильных результатов от своей функции.Функция «Полярный» декартовым координатам не выводит правильные данные

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.

Например: х, у, г (3689.2472215653725,3183.2401988117012,13306.90338789763) выводится, когда я даю функцию этой

-93.028,44.6942,7800 

лат, длинные, Elevation

Может кто-то момент мне найти правильный расслоение плотной код для выполнения это преобразование?

+0

Не знаком с полярными координатами при нахождении точек на земном шаре, [я проверил страницу википедии] (https://en.wikipedia.org/wiki/Polar_coordinate_system#Converting_between_polar_and_Cartesian_coordinates) и не думаю, что у вас есть право входы. Можете ли вы ссылаться на ресурс, который имеет полярные координаты на земном шаре? Кроме того, что такое 'R', что вы принимаете верх? – broguinn

+0

Также, если высота определена как расстояние от центра Земли, не должно быть того же значения, что и 'z', если трехмерная сетка имеет (0, 0) в ядре Земли? – broguinn

ответ

1

Вы должны использовать встроенные функции цезий для этого. См. Cartesian3.fromDegrees и Cartesian3.fromDegreesArray.

Например:

var result = Cesium.Cartesian3.fromDegrees(latitude, longitude, elevation); 

Примечание результат будет как цезий ожидает: в метрах, а не километров. Это также учитывает форму эллипсоида, для которого по умолчанию WGS84 (Земля не является идеальной сферой, как предполагает ваша функция).

1

Нет ничего плохого в использовании Yavascript per se. Однако ваши уравнения неверны. Вы хотите конвертировать из Lat/Long/Alt в Spherical (aka 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]; 
}