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



我已经挣扎了几天,在选择的纬度和经度(纬度= 51.48034773 = 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;

我本质上需要在给定的坐标周围创建半径(例如0.5英里)(51.48034773,-0.194894315),这样我就可以过滤掉其余的数据,只返回人们在所选半径中所做的工作。

希望那是有道理的。如果您有任何疑问,请告诉我。

任何帮助将不胜感激!

尝试以下:

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;

最新更新