![](/img/trans.png)
[英]how to search all the location for given distance and given latitude and longitude in laravel
[英]How to find records based on given latitude and longitude with given distance in PostgreSQL
我正在使用这个公式。
SELECT id, ( 3959 * acos( cos( radians(14.685327) ) * cos( radians( latitude ) )
* cos( radians( longitude ) - radians(80.054889) ) + sin( radians(14.685327) ) * sin(radians(latitude)) ) ) AS distance
FROM kr_user
HAVING distance < 50
ORDER BY distance
但是我收到以下错误:
ERROR: function radians(character varying) does not exist
LINE 1: ..., ( 3959 * acos( cos( radians(14.685327) ) * cos( radians( l...
^
HINT: No function matches the given name and argument types. You might need to add explicit type casts.
如何解决这个问题。 或对此的任何其他建议。 我为此使用 laravel 平台。
我猜你的纬度和经度列是 varchar 类型而不是数字类型(如 14.685327 是)。
所以,试试:
SELECT id, ( 3959 * acos( cos( radians(14.685327) ) * cos( radians( latitude::numeric ) )
* cos( radians( longitude::numeric ) - radians(80.054889) ) + sin( radians(14.685327) ) * sin(radians(latitude::numeric)) ) ) AS distance
FROM kr_user
HAVING distance < 50
ORDER BY distance
现在正如您在评论中指出的那样,您无法过滤计算列,我个人会使用横向连接来解决此问题:
SELECT id, t.distance
FROM kr_user
INNER JOIN LATERAL (
SELECT 3959 * acos(
cos( radians(14.685327) ) *
cos( radians( latitude::numeric ) ) *
cos( radians( longitude::numeric ) - radians(80.054889) ) +
sin( radians(14.685327) ) *
sin(radians(latitude::numeric))
) AS distance
WHERE latitude IS NOT NULL AND longitude IS NOT NULL
) t ON TRUE
WHERE t.distance < 50
ORDER BY t.distance
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.