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

Linda Hamilton
发布: 2024-11-01 01:13:28
原创
657 人浏览过

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!