Как измерить любой радиус в милях вокруг заданной широты и долготы? - PullRequest
0 голосов
/ 14 февраля 2019

В течение нескольких дней я боролся за создание любого заданного радиуса в милях вокруг выбранной широты и долготы (широта = 51.48034773 и долгота = -0.194894315) в PostgreSQL.

Данный набор данных содержит записи миллионов координат моделей движения людей.Я попытался взглянуть на несколько разных методов, но у меня не работает на 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), чтобы я мог отфильтровать оставшиеся данные и вернуть только то, что люди сделали в выбранном радиусе.

Надеюсь, что это имело смысл.Пожалуйста, дайте мне знать, если у вас есть какие-либо вопросы.

ЛЮБАЯ ПОМОЩЬ БУДЕТ БОЛЬШОЙ ЦЕНИТЬ !!

1 Ответ

0 голосов
/ 14 февраля 2019

Попробуйте это:

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;
...