3

Я знаю, что есть другие вопросы, подобные этому, но большинство из них имеют дело только с преобразованием одного в другое. Но я ищу алгоритмы, которые преобразуют друг в друга и друг от друга. Простое использование одного из них не дало желаемых результатов.Реверсивный алгоритм для/от широты и долготы и трехмерной точки

Для моих целей единичная сфера более приемлема. Любое значение радиуса будет 1.

Вот мои текущие методы для этого, в простом psudocode.

От широты и долготы до точки на единичной сфере.

 
x = cos(longitude) * sin(latitude) 
y = sin(longitude) * sin(latitude) 
z = cos(latitude) 

Из трехмерных координат на единицу шара на широту и долготу.

 
latitude = acos(z) 
longitude = atan2(x, y) 

Однако они не являются обратимыми, и моя тригонометрия - это не то, что должно быть.

+0

Многие языки компьютера имеют функцию [atan2 (y, x)] (http://en.wikipedia.org/wiki/Atan2), которая может быть тем, что вам нужно. –

+0

Да, но это не решает неотъемлемую проблему обратимости. – Chase

+0

Какова проблема обратимости, которую вы видите? Atan2 возвращает угол в правильном квадранте, тогда как atan не обязательно сделает это. –

ответ

2

Преобразование из lat/long в xyz всегда возможно, но переход от xyz к lat/long не выполняется, когда sin(lat) == 0. В лат/длинном пространстве нет решения, поэтому просто держитесь подальше от него.
Помимо этого у вашей формулы есть небольшая ошибка, где atan2 принимает y, затем x вместо x, затем y.

+0

«Переход от лат/длинный к xyz терпит неудачу, когда sin (lat) = 0» - потому что он находится на полюсе. Кроме того, некоторые компьютерные языки принимают аргументы в порядке (x, y); например Excel и OpenOffice Calc. –

+0

@AndrewMorton Я понял, что некоторые языки приняли их в том порядке, что (я думаю) имеет больше смысла, но я привык к C++, Java и Python, которые используют 'y, x'. – SirGuy

+0

Вы также можете использовать x, y, если местоположение 0 ° вверх, а не вправо. Я делал это в течение многих лет из-за игры, которая делает это так. – Chase