鉴于输入是_LATITUDE,_LONGITUDE和_METERSRANGE
SELECT *,
( ( ( Acos(Sin(( _LATITUDE * Pi() / 180 )) * Sin((
` LATITUDE `* Pi() / 180 )) +
Cos
((
_LATITUDE * Pi() / 180 )) * Cos((
` LATITUDE `* Pi() / 180 )) *
Cos
((
(
_LONGITUDE - ` LONGITUDE ` ) * Pi() / 180 ))) ) *
180 / Pi
()
) * 60 * 1.1515 * 1.609344 * 1000 ) AS METERS
FROM MYTABLE
WHERE METERS <= _METERSRANGE
Run Code Online (Sandbox Code Playgroud)
如果有人仍在寻找答案,计算距离很简单(精确获取方向很难计算,如果有人知道简单的答案,请添加)
因此,检查经纬度值之间的差异,将十进制更改为 0.001 意味着 111m 距离。检查纬度和经度到十进制的变化最大 0.001 将在您的点周围绘制一个半径为 111m 的圆。
前任。您的起点是 A(Lat1,Lng1)。您要测试的点 B(LatB,LngB) , C(LatC,LngC) .....
if: (Lat1 - 0.001) < LatB < (Lat1 + 0.001) && (Lng1 - 0.001) < LngB < (Lng1 + 0.001) == True // B 点在 100m 半径内。
if: (Lat1 - 0.001) < LatC < (Lat1 + 0.001) && (Lng1 - 0.001) < LngC < (Lng1 + 0.001) == False // 点 C 不在 100m 半径内。
十进制度参考https://en.wikipedia.org/wiki/Decimal_ Degrees
| 小数 | 度 | 距离 |
|---|---|---|
| 0 | 1.0 | 111 公里 |
| 1 | 0.1 | 11.1公里 |
| 2 | 0.01 | 1.11 公里 |
| 3 | 0.001 | 111米 |
| 4 | 0.0001 | 11.1米 |
| 5 | 0.00001 | 1.11米 |
| 6 | 0.000001 | 0.111米 |
| 7 | 0.0000001 | 1.11厘米 |
| 8 | 0.00000001 | 1.11毫米 |
| 归档时间: |
|
| 查看次数: |
7709 次 |
| 最近记录: |