我试图计算两个位置之间的距离,给出他们在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 KM
2)选择gc_dist(34.313004,133.86454,34.313983,133.83002)为dist;
结果:213.50 KM
您可以看到1)&的更改结果2)太远而long / lat非常接近(在https://www.movable-type.co.uk/scripts/latlong.html上检查,Result1应该是0.1236而Result2:3.172>>这对我来说似乎没问题)
我在这里做错了什么?
请帮忙。我是新手。
答案 0 :(得分:0)
我认为你使用的公式是英里而不是千米。 看,这里的常数不同http://www.codecodex.com/wiki/Calculate_Distance_Between_Two_Points_on_a_Globe#PostgreSQL_PL.2FPERLU
答案 1 :(得分:0)
您可以使用内置的PostGIS功能吗?例如,您的第一个距离可以使用以下公式计算:
select st_distancesphere(st_makepoint(34.313004, 133.86454), st_makepoint(34.312454, 133.86337));
结果为136.82660446
(米)。