Вопрос о широте / долготе - PullRequest
0 голосов
/ 09 июля 2011

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

$distance = sqrt((($firstLongitude-$secondLongitude)*($firstLongitude-$secondLongitude))+(($firstlLatitude-$secondLatitude)*($firstLatitude-$secondLatitude)));

Я знаю, что пример на PHP, но логика должна быть очевидной. Поэтому мой вопрос заключается в том, будет ли использование приведенной выше логики для определения ближайшего к пользователю местоположения из списка местоположений широты и долготы давать мне правильные результаты, или есть потенциальная проблема, которую я упускаю?

Это приложение будет работать только в США, если это имеет какое-либо значение.

Примечание: Мне также было интересно, смогу ли я еще больше упростить это и отбросить часть sqrt, поскольку я просто хочу увидеть, что ближе, а не как близко.

Ответы [ 2 ]

4 голосов
/ 10 июля 2011

Следующее является точным, если точки находятся в пределах 10000 км от каждого другой, и если земля считается сферической. Используйте d2, если вы просто хочу сравнить расстояния. расстояние - приблизительное расстояние в км.

deg = pi/180;
phi1 = lat1 * deg;
phi2 = lat2 * deg;
lam12 = (lon2 - lon1) * deg;

d2 = ( cos(phi1) * sin(phi2) - sin(phi1) * cos(phi2) * cos(lam12) )^2
 + ( cos(phi2) * sin(lam12) )^2;

a = 6371.009;  // kilometers
distance = a * asin( sqrt( d2 ) );

Для большей точности вам нужно относиться к земле как к эллипсоиду; увидеть мой онлайн геодезический калькулятор на http://geographiclib.sf.net/cgi-bin/Geod и запись в http://arxiv.org/abs/1102.1215.

1 голос
/ 09 июля 2011

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

Используйте следующую формулу.арифметические формулы не так уж тяжелы по сравнению с некоторыми действиями в сети или пользовательском интерфейсе

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