По сути, у меня в игре три координаты.
- Кливленд, Теннесси - (35.255097, -84.86844) - Это источник.
- Атланта, Джорджия -(32.4608333, -84.9877778) - Это намного ближе к этому источнику.
- Колумб, Джорджия - (33.7488889, -84.3880556) - Это определенно еще дальше.
Вот карта Google с этими тремя точками для сравнения.
Теперь с помощью модуля Earthdistance для Postgresql Я буду использовать оператор <@>
, чтобы получить эфирмиль между двумя точками.
SELECT 'Celeveland, TN' AS origin
, '(35.255097,-84.86844)' AS origin_cords
, city || ', ' || region AS dest
, cords AS cords
, cords <@> '(35.255097,-84.86844)'::point AS distance_miles
FROM maxmind.city
WHERE (region = 'GA' AND city ='Atlanta') OR (region = 'GA' AND city = 'Columbus')
;
И все же это то, что я получаю ...
origin | origin_cords | dest | cords | distance_miles
----------------+-----------------------+--------------+--------------------------+------------------
Celeveland, TN | (35.255097,-84.86844) | Columbus, GA | (32.4608333,-84.9877778) | 18.952732930393
Celeveland, TN | (35.255097,-84.86844) | Atlanta, GA | (33.7488889,-84.3880556) | 34.5888147812704
(2 rows)
Так что это говорит мне о том, что Колумб, штат Джорджия, ближе к Кливленду), TN, чем Атланта, Джорджия (34,58mi), хотя я могу четко сказать, что это не так.Я подтвердил эти результаты на Postgresql 9.1 и Postgresql 8.4.