Правильный способ нахождения расстояния между двумя координатами, используя пространственную функцию в MySql - PullRequest
8 голосов
/ 16 марта 2011

Я пытаюсь вычислить расстояние между двумя точками, используя пространственные функции в Mysql и PostgresSQL. Я взял широту и долготу от Google. Подробности ниже

Местоположение одно - Лат: 42.260223; Lon: -71,800010

Местоположение два - Lat: 42.245647; Lon: -71.802521

Используемый SQL-запрос:

ВЫБРАТЬ РАССТОЯНИЕ (GEOMFROMTEXT ('Точка (42.260223 -71.800010)'), GEOMFROMTEXT ('Точка (42.245647 -71.802521)'))

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

http://www.zip -codes.com / distance_calculator.asp? Zip1 = 01601 & zip2 = 01610 & Submit = Поиск = 1,44 миль

http://www.distancecheck.com/zipcode-distance.php?start=01601&end=01610 = 1,53 мили

Итак, я хочу знать, правильный ли мой метод расчета / запрос. И если это неправильно, то каков правильный способ запроса БД для расстояния.

Ответы [ 2 ]

8 голосов
/ 26 августа 2011

Простой ответ - использовать формулу Хаверсайна. Это предполагает, что Земля - ​​это сфера, но это не плохое приближение. Это, со множеством других деталей, описаны в этой презентации:

http://www.scribd.com/doc/2569355/Geo-Distance-Search-with-MySQL

5 голосов
/ 26 августа 2011

В приведенном выше случае MySql просто применяет теорему Пифагора: c2 = a ^ 2 + b ^ 2. В этом конкретном случае SQRT ((42.245647 - 42.260223) ^ 2 + (-71.802521 ^ 2 - -71.800010) ^ 2) = 0,014790703.

На самом деле есть две проблемы с использованием функции расстояния MySql для расстояния с координатами на сфере. (1) MySql рассчитывает расстояние на плоскости, а не на сфере. (2) Результат возвращается в форме градусов, а не миль. Чтобы получить истинное сферическое расстояние в милях, километрах, футах и ​​т. Д., Вам необходимо преобразовать свои широты и долготы в единицы, которые вы хотите измерить, определив радиус от линии, проходящей через центр земли, для широты Вы измеряете.

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

...