Какова общая структура / формат данных для (географического) местоположения и как вы их сравниваете? - PullRequest
2 голосов
/ 08 июля 2010

Какова структура общего (или независимого от устройства) физического местоположения?Я предполагаю, что это может быть структура с двумя длинными полями или что-то подобное.

Кроме того, с учетом одного местоположения пункта назначения и двух местоположений кандидатов, существует ли простой алгоритм для определения того, какой кандидат ближе всего к месту назначения?Я на самом деле не ищу библиотеку или сервис, который бы обрабатывал все это, хотя это могло бы быть вариантом (в Java), скорее я хотел бы иметь несколько очень простых понятий низкого уровня, которыми я мог бы фактически управлять сам.

Спасибо!

Редактировать Учитывая сложности вычислений, отмеченных f1sh - есть ли хорошая небольшая библиотека Java, которая обрабатывает вычисления haversine?

Ответы [ 4 ]

4 голосов
/ 08 июля 2010

Сохранение широты и долготы в классе не должно быть проблемой ни для кого, как вы и Andreas_D уже упоминали (2 двойных поля).

Хитрость заключается в вычислении расстояния между 2 точками наПоверхность этой планеты не так проста, как формула общего расстояния между двумя 2D-точками.Необходимо учитывать следующие факты:

  • В то время как широта колеблется от -90 ° (Южный полюс) до + 90 °, долгота является периодической.Это означает, что точка (0 °, 179 °) имеет расстояние всего лишь 1 ° от точки (0 °, -180 °).
  • Земля - ​​это сфера.Это приводит к тому, что преобразование из lat / long в метрическую систему (которую, я надеюсь, вы используете ...) не совсем легкое.1 ° долготы на экваторе (который находится на широте 0 °) составляет около 111 км, тогда как на точном северном полюсе 1 ° долготы составляет 0 (км / дюймы / футы / что угодно).
  • Больше математики.
2 голосов
/ 08 июля 2010

GPS-устройства обычно предоставляют следующие данные о местоположении:

  1. Широта
  2. Долгота
  3. Высота
  4. Горизонтальная точность
  5. Вертикальная точность

(не говоря уже о скорости, пункте назначения, спутниках и т. Д.)

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

РЕДАКТИРОВАТЬ: Взгляните на формулу haversine здесь .Пример кода тоже есть.Я не думаю, что вам нужна библиотека для этого.

0 голосов
/ 08 июля 2010

Это, по-видимому, самая точная формула, поскольку haversine является неточным при коротких расстояниях:

//L = latitude, G = longtitude
double delta = G1 - G2;  
double p1 = cos(L2) * sin(delta);
double p2 = cos(L1) * sin(L2) - sin(L1) * cos(L2) * cos(delta);  
double p3 = sin(L1) * sin(L2) + cos(L1) * cos(L2) * cos(delta);
distance = 60 * Math.atan2(Math.sqrt(p1*p1 + p2*p2), p3);

Ссылка

0 голосов
/ 08 июля 2010

Да, класс как

public Geo {
  private double lat;
  private double lon;
}

достаточно для хранения географического местоположения. Возможно, вы захотите добавить метод установки, чтобы убедиться, что lat, lon всегда находятся в допустимом диапазоне, в противном случае Geo-объект может иметь недопустимое состояние.

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