使用pythagoras - postgresql获取距离后按接近度排序



我正在使用postgresql来计算不同的点是否在一个特定的范围内(使用毕达哥拉斯计算)

问题是我希望得到的结果是按接近度排序的,而不是随机的。

这是我的查询:

select * from point l where ((abs(l.lat*111139 - myPointLat*111139)^2) + (abs(l.lng*111139 - (myPointLng*111139))^2)) <= metres^2;

我想使用查询的这一部分对它进行排序:

((abs (l。lat111139 - myPointLat111139)^2) + (abs(l。lng111139 - (myPointLng111139))^2)

我怎样才能做到这一点?

非常感谢!

如果希望避免重复表达式,可以在子查询中添加计算列,然后在子查询上执行过滤。

select Column1, Column2, Column3 from 
(
select *,
(
(abs(l.lat*111139 - myPointLat*111139)^2) + 
(abs(l.lng*111139 - (myPointLng*111139))^2)
) as proximity
from point l
)
where proximity <= metres^2
order by proximity

columnn1, Column2, Column3是您感兴趣的原始point表中的列。

性能方面,最好只是重复表达式,因为这样Postgres肯定可以先做过滤,这意味着它必须处理一个潜在的小得多的数据集,这将更快:

select *
from point l
where (
(abs(l.lat*111139 - myPointLat*111139)^2) + 
(abs(l.lng*111139 - (myPointLng*111139))^2)
) <= metres^2
order by (
(abs(l.lat*111139 - myPointLat*111139)^2) + 
(abs(l.lng*111139 - (myPointLng*111139))^2)
)

检查另一个问题如何重用SELECT, WHERE和ORDER BY子句的结果?因为我觉得这会对你有很大帮助!

相关内容

  • 没有找到相关文章

最新更新