如何在给定的经度和纬度上测量以英里为单位的任何半径?

时间:2019-02-13 22:02:13

标签: sql postgresql latitude-longitude radius

我已经努力了几天,以在PostgreSQL上围绕选定的经度和纬度(纬度= 51.48034773和经度= -0.194894315)创建以英里为单位的任何给定半径。

给定的数据集包含人们运动模式的数百万个坐标的记录。我尝试了几种不同的方法,但是它对PostgreSQL不起作用,但是我绝对需要在PostgreSQL上进行。

SELECT device,brand, (
   6380 * acos(
      cos(radians(51.48034773))
      * cos(radians(latitude))
      * cos(radians(lonigtude) - radians(-0.194894315))
      + sin (radians(51.48034773))
      * sin(radians(latitude))
   ))
  AS distance
FROM public.consumer
HAVING distance < 0.5
ORDER BY 1 DESC;

我基本上需要围绕给定坐标(51.48034773,-0.194894315)创建一个半径(例如0.5英里),以便我可以过滤掉其余数据,只返回人们在选定半径内所做的事情。

希望有些道理。如有任何问题,请告诉我。

任何帮助都将得到极大认可!

1 个答案:

答案 0 :(得分:0)

尝试一下:

select id, distance
from (
    select device,brand, ( 6371 * acos( cos( radians(51.8391) ) * cos( radians( latitude ) ) * cos( radians( lonigtude ) - radians(4.6265) ) + sin( radians(51.8391) ) * sin( radians( latitude ) ) ) ) as distance
    from public.consumer
) as dt
where distance < 0.5;