【问题标题】:Error in calculating distance using latitude & longitude (PostgreSQL)使用纬度和经度计算距离时出错(PostgreSQL)
【发布时间】:2018-09-02 18:38:59
【问题描述】:

我正在尝试根据 postgres sql 上的纬度和经度信息计算两个位置之间的距离。

在谷歌搜索时,我发现我可以使用以下功能:


创建或替换函数 gc_dist (_lat1 FLOAT8,_lon1 FLOAT8,_lat2 FLOAT8,_lon2 FLOAT8) 返回 FLOAT8 作为 $$ SELECT ACOS(SIN($1)*SIN($3) + COS($1)*COS($3)*COS($4 - $2))*6371;$$ LANGUAGE sql IMMUTABLE;


我在几个纬度/经度组合上使用了这个函数,结果似乎抛出了奇怪的值,例如

1) 选择 gc_dist(34.313004, 133.86454, 34.312454, 133.86337) 作为 dist;

结果:8.04 公里

2) 选择gc_dist(34.313004, 133.86454, 34.313983, 133.83002) 作为dist;

结果:213.50 公里

您可以看到 1) 和 2) 的更改结果太远了,而 long/lat 非常接近(检查 https://www.movable-type.co.uk/scripts/latlong.html,Result1 应该是 0.1236 和 Result2: 3.172 >> 这对我来说似乎没问题)

我在这里做错了什么?

请帮忙。我是新手。

【问题讨论】:

    标签: postgresql distance latitude-longitude


    【解决方案1】:

    您可以使用内置的 PostGIS 功能吗?例如,您的第一个距离可以使用以下公式计算:

    select st_distancesphere(st_makepoint(34.313004, 133.86454), st_makepoint(34.312454, 133.86337));
    

    给出136.82660446(米)的结果。

    【讨论】:

    • 谢谢!我现在最终使用 PostGIS。
    • 一定要点赞接受,这样以后的人才能被正确引导。
    【解决方案2】:

    我认为您使用的是英里而不是公里的公式。 看,这里的常数不一样http://www.codecodex.com/wiki/Calculate_Distance_Between_Two_Points_on_a_Globe#PostgreSQL_PL.2FPERLU

    公式为https://en.wikipedia.org/wiki/Haversine_formula

    【讨论】:

    • 如果问题以英里或公里为单位,则来自两个来源(站点和 sql)的结果的比率不能关闭。
    • 可能还有另一个错误。 codecodex 示例页面中的不同实现可能会有所帮助。
    猜你喜欢
    • 2021-10-18
    • 2013-04-16
    • 1970-01-01
    • 2021-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-05
    相关资源
    最近更新 更多