ГИС - получить странный результат при расчете расстояния между двумя точками - PullRequest
0 голосов
/ 15 мая 2019

Я использую алгоритм (см .: Расчет расстояния между двумя точками ), чтобы вычислить расстояние между двумя точками. но результат будет неправильным, см. код Java:

/**
 * group1:set latitude to 89
 */
// set longitude1 = 0, longitude2 = 1
System.out.println(distance(89, 89, 0, 1, 0 , 0)); // 1941.0            result1

// set longitude1 = 0, longitude2 = 2
System.out.println(distance(89, 89, 0, 2, 0 , 0)); // 3881.0            result2

// set longitude1 = 0, longitude2 = 179
System.out.println(distance(89, 89, 0, 179, 0 , 0)); // 222381.0        result3

// set longitude1 = 0, longitude2 = 180
System.out.println(distance(89, 89, 0, 180, 0 , 0)); // 222390.0        result4

/**
 * group2:set latitude to 0
 */
// set longitude1 = 0, longitude2 = 1
System.out.println(distance(0, 0, 0, 1, 0 , 0)); // 111195.0            result5

// set longitude1 = 0, longitude2 = 2
System.out.println(distance(0, 0, 0, 2, 0 , 0)); // 222390.0            result6

// set longitude1 = 0, longitude2 = 179
System.out.println(distance(0, 0, 0, 179, 0 , 0)); // 19903892          result7

// set longitude1 = 0, longitude2 = 180
System.out.println(distance(0, 0, 0, 180, 0 , 0)); // 20015087          result8

в группе 1:

a = результат2 - результат1 = 1940

b = result4 - result3 = 9

в группе 2:

с = результат6 - результат5 = 111195

d = result8 - result7 = 111195

Это очень странно. c = d, группа 2 правильная, но a ≠ b, группа1 неправильная.

Как мне решить эту проблему? Есть ли другой алгоритм более высокой точности для расчета расстояния между двумя координатными точками

1 Ответ

2 голосов
/ 15 мая 2019

Что ж, результаты приблизительные - если вам нужна более высокая точность, вам нужно использовать вычисления на сфероиде, а не вычисления на сфере, которые использует формула.

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

Это геодезические расстояния - кратчайшие расстояния на сфере, поэтому интуицияпро расстояния на плоской карте здесь не всегда работает.Вы можете визуализировать геодезические, например, https://academo.org/demos/geodesics/, чтобы улучшить интуицию.

Сначала результат2 и результат1 против результата6 и результата5.Как вы могли заметить, результат6 в два раза больше результата5, но результат2 немного меньше результата1.Почему это?Поскольку геодезические от (89, 0) до (89, 2) не проходят через (89, 1), а идут немного дальше на север.

Геодезические от (89, 0) до (89,180) проходит через Северный полюс - поэтому он сильно отличается от геодезического в 180 раз от (89, 0) до (89, 1).

С другой стороны, с широтой 0 геодезические всегда следуют за экватором.Или в случае противоположных концов 0, 0 и 0, 180 - все геодезические имеют одинаковую длину.Таким образом, ваши ожидания относительно дистанционных отношений верны в этом особом случае.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...