【问题标题】:How to measure any radius in miles around a given latitude and longitude?如何测量给定纬度和经度周围的任何半径(以英里为单位)?
【发布时间】:2019-02-13 22:02:12
【问题描述】:

几天来,我一直在努力在 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 英里),这样我就可以过滤掉其余的数据,只返回人们在所选半径内所做的事情。

希望这有点道理。如果您有任何问题,请告诉我。

任何帮助将不胜感激!!

【问题讨论】:

    标签: sql postgresql latitude-longitude radius


    【解决方案1】:

    试试这个:

    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;
    

    【讨论】:

    • 它返回一个错误:“错误:函数弧度(字符)不存在第17行:...(6371 * acos(cos(弧度(51.48034773))* cos(弧度(l.. "
    • 还提示:“提示:没有函数匹配给定的名称和参数类型。您可能需要添加显式类型转换。”
    • 此错误与它总是返回的错误几乎相同。 “弧度”似乎有问题,但我检查过 postgreSQL 弧度是否正确。来源:w3resource.com/PostgreSQL/radians-function.php
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-26
    • 2014-05-31
    • 2015-06-15
    • 1970-01-01
    • 1970-01-01
    • 2018-09-09
    • 1970-01-01
    相关资源
    最近更新 更多