像这样的东西应该可以解决问题:
SELECT
*
FROM
YOUR_TABLE
WHERE
SQRT((input_lat - db_lat) * (input_lat - db_lat) + (input_long - db_long) * (input_long - db_long)) <= input_radius
我用这个:两点之间的距离
只有一件事:将半径转换为与坐标相同的单位
链接的内容(以防万一)
这个小操作计算两点之间的距离。该例程可以在任意数量的维度上工作,因此您可以将其冷应用到 2D 或 3D。
在 2D 中定义两个点。点 1 在 (x1, y1) 和点 2 在 (x2, y2)。
xd = x2-x1
yd = y2-y1
Distance = SquareRoot(xd*xd + yd*yd)
在 3D 中定义两个点。点 1 在 (x1, y1, z1) 和点 2 在 (x2, y2, z2)。
xd = x2-x1
yd = y2-y1
zd = z2-z1
Distance = SquareRoot(xd*xd + yd*yd + zd*zd)
如您所见,这需要您执行平方根。如果您想编写快速代码,应该像瘟疫一样避免平方根。仅在确实需要时才执行平方根。
避免平方根的方法:如果您不需要非常精确的距离,可以使用查找表来计算。
例如,如果您正在执行球体之间的碰撞检测,而您只想知道两个球体是否发生了碰撞,那么您就不需要使用平方根。只需更改一段代码
来自:如果 SquareRoot(xd xd + yd yd) < 直径
to: if (xd xd + yd yd) < (直径*直径)