我有一个不支持三角函数的SQLite数据库。我想按距离对桌中的一组经纬度进行排序,而不是第二对经纬度对。我熟悉用于按距离对经纬度对进行排序的标准Haversine距离公式。
在这种情况下,我并不特别在意精度,因为我的点之间相隔很远,所以我不介意通过将曲线视为直线来舍入距离。
我的问题是,这种查询是否有公认的公式?记住没有触发功能!
如果您的点彼此之间的距离在合理范围内(即,不在世界的一半范围内,也不在日期线之间),则可以对经度和纬度之间的差异进行校正(因为经度较短,除非在赤道处) ),然后像平地一样计算距离。
当您只想对值进行排序时,您甚至不必使用平方根,您只需添加差异的平方即可。
示例,其中@lat和@lng是您当前的位置,并且2是差异校正:
@lat
@lng
2
select * from Points order by (lat - @lat) * (lat - @lat) + ((lng - @lng) * 2) * ((lng - @lng) * 2)
您可以将特定纬度的差异校正计算为1 / cos(lat)。
1 / cos(lat)
Cees Timmerman提出了这个公式,该公式也适用于日期范围:
pow(lat-lat2, 2) + pow(2 * min(abs(lon-lon2), 360 - abs(lon-lon2)), 2)