使用纬度和经度计算距离时出错(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
您可以使用内置的 PostGIS 功能吗?例如,您的第一个距离可以使用以下公式计算:
select st_distancesphere(st_makepoint(34.313004, 133.86454), st_makepoint(34.312454, 133.86337));
这给出了 136.82660446
(米)的结果。
我正在尝试根据 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
您可以使用内置的 PostGIS 功能吗?例如,您的第一个距离可以使用以下公式计算:
select st_distancesphere(st_makepoint(34.313004, 133.86454), st_makepoint(34.312454, 133.86337));
这给出了 136.82660446
(米)的结果。