使用纬度和经度计算距离时出错(PostgreSQL)

Error in calculating distance using latitude & longitude (PostgreSQL)

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

在进行 google 搜索时,我发现我可以使用以下功能:


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


我在几个 lat/long 组合上使用了这个函数,结果似乎抛出了奇数,例如

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

结果:8.04 公里

2) select 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,结果 1 应该是 0.1236,结果 2:3.172 >> 这看起来没问题对我来说)

我做错了什么?

请帮忙。我是新手。

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

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

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

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

这给出了 136.82660446(米)的结果。