3

本质上,我有三个坐标在起作用。

  1. 田纳西州克利夫兰 -- (35.255097,-84.86844) -- 这就是起源。
  2. 佐治亚州亚特兰大 -- (32.4608333,-84.9877778) -- 这更接近原点。
  3. 乔治亚州哥伦布市 -- (33.7488889,-84.3880556) -- 这肯定更远。

这是一张谷歌地图,上面有这三个点进行比较。

现在使用Postgresql 的 Earthdistance 模块,我将使用<@>运算符来获取两点之间的航空里程。

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)

所以它告诉我的是,乔治亚州哥伦布市比乔治亚州亚特兰大市(34.58 英里)更接近田纳西州克利夫兰(18.95 英里),尽管我可以清楚地看出这不是真的。我已经在 Postgresql 9.1 和 Postgresql 8.4 上确认了这些结果。

4

1 回答 1

3

反转坐标顺序,PostGIS期望latitude 是 first

UPD:对不起,我被 postgis 标签弄糊涂了,这不是 PostGIS 功能。从您链接的 earthdistance 文档中:“第一个组件以度为单位表示经度,第二个组件以度为单位表示纬度”。你是对的,它可以在谷歌地图中使用,但顺序相反。

UPD 2:看来我们拥有整个GIS Stackexchange

于 2012-02-22T04:43:40.280 回答