gpt4 book ai didi

postgresql - 为什么 <@> 没有在 Postgresql 中返回正确的距离?

转载 作者:行者123 更新时间:2023-11-29 11:46:05 25 4
gpt4 key购买 nike

基本上,我使用了三个坐标。

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

Here is a Google Map with these three points for comparison.

现在使用 Earthdistance module for 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)

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

最佳答案

反转坐标顺序,PostGIS expects纬度是第一个

UPD:抱歉,我被 postgis 标签弄糊涂了,这不是 PostGIS 函数。从您链接的地球距离文档中:“第一个组件被用来表示以度为单位的经度,第二个组件被用来表示以度为单位的纬度”。你是对的,它适用于谷歌地图,但顺序相反。

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

关于postgresql - 为什么 <@> 没有在 Postgresql 中返回正确的距离?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9386632/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com