2013-06-22 6 views
0

Я нашел отличный способ рассчитать угол направления от двух координат, и я пробовал решение в excel, он отлично работал, когда я набрал приблизительно координаты , Но если я реализую код в java, я получаю жалко разные результаты по двойным переменным dxy (angle). Координаты в порядке, я дважды проверил их. :)Как рассчитать угол направления от двух координат GPS

double lon1 = (double)Math.round(LongitudeDouble * 1000000)/1000000; 
    double lat1 = (double)Math.round(LatitudeDouble * 1000000)/1000000; 

    double lon2 = 19.055954; 
    double lat2 = 47.569331; 

    *************************** 

    double dy = (lat2 - lat1); 
    double dx = Math.cos(Math.PI/180*lat1)*(lon2-lon1); 

    double dxy = Math.atan2(dy, dx); 
    double degree = 180/Math.PI*dxy; 
+0

Что вы имеете в виду под «степенью направления»? Вы говорите о угле в сферических координатах? –

+0

Да, им говорят о угле. –

+0

Я могу только рекомендовать использовать отладчик в Eclipse и проверить, рассчитано ли каждое значение как ожидалось. Небольшие различия между вычислениями Excel и Java являются нормальными, но действительно большие не должны происходить. –

ответ

3

Причина Excell отклоняется от вашего программного кода, что Excell использует порядок аргументов: х, у, а языки программирования, такие как использование Java порядок (у, х). см. документ для atan2.

Кроме того, вы и некоторые другие сообщения в SO сбиваете математические углы (восток = 0 против часовой стрелки) и географические направления в градусах (роза компаса): север = 0, по часовой стрелке). после вычисления угла, который поставляет математические углы, вы должны преобразоваться в гео-направления, но:

вы используете неправильную формулу. Ваша формула работает для декартовых координат (например, точек экрана, пикселей), а не для сферических (lat, long). поиск здесь на SO для между двумя координатами

atan2 поставляет значение из [-pi, pi]. но гео-направление 0-360.

, кстати, правильный ответ:

подшипника/заголовок/курс из LAT1, lon1 до лат, lon2 = 122.0402

Таким образом, формула частично нонсенс:
Ваш код дает -32.04
1. Итак, вы сначала обменялись с и до пункта; угол измеряется от p1 до p2.
2. -90 -32 = -122, который является ожидаемым результатом. (математический или геометрический угол)

Итак, вы испортили свои собственные номера. вы набрали в Excell другой номер, чем в Java, или отправил неправильный номер: результат в коде Java является -32.04 Используя эти цифры:

double lon1 = 19.053143; 
double lat1 = 47.570518; 

double lon2 = 19.055954; 
double lat2 = 47.569331; 
+0

спасибо за информацию, но все равно это не может быть проблемой. замена x и y может превратить 17 ° в 90 ° -17 ° или около того. изменение с математического на гео-направление добавляет кратное 90 ° и знак минус. декартовое исчисление делает незначительное различие, поскольку его точки выборки довольно близки друг к другу. Таким образом, это не может объяснить расхождение между 17 ° и его значением excel 90 ° – user829755

+0

. Если вы хотите, вы можете узнать, почему ваша неправильная формула отклоняется, реализуя ее в excell со многими промежуточными шагами и проверяя линию на линию, где она начинает отклоняться , – AlexWien

+0

Обновлен детальный анализ. – AlexWien

Смежные вопросы