我一直在努力在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英里),这样我就可以过滤掉其余的数据,只返回人们在所选半径范围内所做的事情。
希望这有点道理。请让我知道,如果你有任何问题。
任何帮助将不胜感激!!
试试这个:
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;