我有一个sqlite数据库,它不支持trig函数.与第二个lat,lng对相比,我想按距离对我的表中的一组lat,lng对进行排序.我熟悉用于按距离分类lat,lng对的标准hasrsine距离公式.
在这种情况下,我并不特别关心精度,我的点被远距离分开,所以我不介意通过将曲线视为直线来舍入距离.
解决方法
如果你的点在彼此的合理距离内(即不是在世界的一半,而不是在日期线上),你可以对纬度和经度之间的差异进行校正(因为经度较短,除赤道外) ),然后计算距离,好像地球是平坦的.
由于您只想对值进行排序,您甚至不必使用平方根,只需添加差异的平方即可.
例如,@ 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)
原文地址:https://www.jb51.cc/mssql/84087.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。