用于地理空间半径搜索的数据库查询
在这种情况下,我们的目标是识别位置落在由标记表示的定义半径区域内的个人地图。
半径计算
要确定点 (x, y) 是否位于以 (x1, y1) 为中心、半径为 r 的圆内,我们采用以下公式:
(x - x1)^2 (y - y1)^2
度数到公里的转换
为了保证等式两边单位一致,我们使用转换系数 111.12 公里/度将经纬度转换为公里。
修改公式
应用转换后,修改后的公式变为:
((x - x1) * 111.12)^2 ((y - y1) * 111.12)^2
其中 4 代表 2 公里的平方半径。
SQL 实现
为了在 MySQL 中实现此公式,我们构建一个将每个标记配对的查询(用户 A )与待定位用户(用户B)的中心点:
<code class="sql">SELECT A.user_id, A.radius_id, A.latitude, A.longitude FROM UserA AS A JOIN (SELECT user_id, latitude, longitude FROM UserB WHERE user_id = 8) AS B ON (POW((A.latitude - B.latitude) * 111.12, 2) + POW((A.longitude - B.longitude) * 111.12, 2)) <= 4</code>
精度增强
为了获得更精确的结果,可以将公式修改为考虑相对于纬度的经纬度差异:
((x - x1) * 111.12 * cos(B.latitude))^2 ((y - y1) * 111.12)^2
或相对于经度:
((x - x1) * 111.12 * cos(A.latitude))^2 ((y - y1) * 111.12)^2 < ;= 4
以上是如何在数据库中有效地执行地理空间数据的半径搜索?的详细内容。更多信息请关注PHP中文网其他相关文章!