use*_*907 3 mysql sql sql-server android android-sqlite
你好,我目前正在开发一个 Android 应用程序,该应用程序将商店的详细信息存储在 SQL 数据库中,用户使用该应用程序来搜索周围的商店。
我找到了一个称为半正矢的公式来查找具有纬度和经度值的两点之间的距离。
SELECT id, ( 3959 * acos( cos( radians(37) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(-122) ) + sin( radians(37) ) * sin( radians( lat ) ) ) ) AS distance FROM markers HAVING distance < 25 ORDER BY distance LIMIT 0 , 20;
Run Code Online (Sandbox Code Playgroud)
但我对此感到困惑,我不知道哪个 lat 和 lng 值指的是什么!如果有人可以重写上面的代码,使我的用户对店主拥有位置 lat1 和 lng1,那么它就是 lat2 和 lng2。你也能告诉我那是什么吗
acos
Run Code Online (Sandbox Code Playgroud)
纬度/经度的顺序并不重要。这样想...从 A 点到 B 点的距离与从 B 点到 A 点的距离相同。
在您的代码示例中,37 是纬度点,-122 是经度点。
acos 是反余弦三角函数。这里的解释: 反余弦
SELECT id, ( 3959 * acos( cos( radians(Lat1) ) * cos( radians( Lat2 ) ) * cos( radians(Lng2) - radians(Lng1) ) + sin( radians(Lat1) ) * sin( radians(Lat2)))) AS distance
FROM markers
HAVING distance < 25
ORDER BY distance
LIMIT 0 , 20;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9740 次 |
| 最近记录: |