小编典典

不带三角函数的SQL距离查询

sql

我有一个不支持三角函数的SQLite数据库。我想按距离对桌中的一组经纬度进行排序,而不是第二对经纬度对。我熟悉用于按距离对经纬度对进行排序的标准Haversine距离公式。

在这种情况下,我并不特别在意精度,因为我的点之间相隔很远,所以我不介意通过将曲线视为直线来舍入距离。

我的问题是,这种查询是否有公认的公式?记住没有触发功能!


阅读 183

收藏
2021-03-23

共1个答案

小编典典

如果您的点彼此之间的距离在合理范围内(即,不在世界的一半范围内,也不在日期线之间),则可以对经度和纬度之间的差异进行校正(因为经度较短,除非在赤道处)
),然后像平地一样计算距离。

当您只想对值进行排序时,您甚至不必使用平方根,您只需添加差异的平方即可。

示例,其中@lat@lng是您当前的位置,并且2是差异校正:

select *
from Points
order by (lat - @lat) * (lat - @lat) + ((lng - @lng) * 2) * ((lng - @lng) * 2)

您可以将特定纬度的差异校正计算为1 / cos(lat)


Cees Timmerman提出了这个公式,该公式也适用于日期范围:

pow(lat-lat2, 2) + pow(2 * min(abs(lon-lon2), 360 - abs(lon-lon2)), 2)
2021-03-23