Если у меня есть все данные геокодирования Google для нескольких адресов, как рассчитать их близость? - PullRequest
0 голосов
/ 07 сентября 2010

У меня есть несколько адресов, записанных в моей базе данных, и я использовал сервис геокодирования Google, чтобы получить их долготу, широту и т. Д.

Что мне нужно сделать, чтобы вычислить близость одного адреса к другомув милях?

В идеале я хочу показать запись, а затем сказать под ней: «Следующие записанные адреса находятся рядом.»

Ответы [ 3 ]

1 голос
/ 07 сентября 2010

Существует несколько алгоритмов, которые преобразуют координаты широты / долготы в расстояние в милях.

См. http://www.meridianworlddata.com/Distance-Calculation.asp

Я проверил все из них, и если вы действительно беспокоитесь о производительности, вы можете использовать:

sqrt(x * x + y * y)

where x = 69.1 * (lat2 - lat1) 
and y = 53.0 * (lon2 - lon1) 

Это достаточно хорошее приближение.

Похожие: PHP MySql и геолокация

1 голос
/ 07 сентября 2010

см. http://www.movable -type.co.uk / scripts / latlong.html , например.

В метрах:

D_AB = 6378137 * acos( cos(PI/ 180 * latA) * cos(PI/ 180 * lngA) * 
  cos(PI/ 180 * latB) * cos(PI/ 180 * lngB) + cos(PI/ 180 * latA) * 
  sin(PI/ 180 * lngA) * cos(PI/ 180 * latB) * sin(PI/ 180 * lngB) + 
  sin(PI/ 180 * latA) * sin(PI/ 180 * latB))
0 голосов
/ 07 сентября 2010

Если все, что вас беспокоит, это близость, тогда манхэттенского расстояния может быть достаточно.

boolean isProximate ( double latE , double longE )
{
      return ( ( Math . abs  ( latA - latB ) < latE ) && ( Math . abs ( longA - longB ) < longE ) ) ;
}
...