首页  >  文章  >  数据库  >  如何在数据库中有效地执行地理空间数据的半径搜索?

如何在数据库中有效地执行地理空间数据的半径搜索?

Linda Hamilton
Linda Hamilton原创
2024-11-01 01:13:28658浏览

How can I efficiently perform radius searches in a database for geospatial data?

用于地理空间半径搜索的数据库查询

在这种情况下,我们的目标是识别位置落在由标记表示的定义半径区域内的个人地图。

半径计算

要确定点 (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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn