首页 > 数据库 > mysql教程 > 如何高效地查找给定点 5 英里范围内的所有建筑物?

如何高效地查找给定点 5 英里范围内的所有建筑物?

Mary-Kate Olsen
发布: 2025-01-09 11:56:46
原创
116 人浏览过

How Can I Efficiently Find All Buildings Within 5 Miles of a Given Point?

优化空间查询:高效查找5英里范围内所有建筑物

本文探讨一个常见空间问题:从给定坐标点检索指定半径范围内的所有建筑物。 直接使用ST_CONTAINS函数可能效率不高,因此本文将探索更优的解决方案。

数据表示的重要性

在深入技术细节之前,必须强调正确数据表示的重要性。将地理空间数据存储为单独的经度和纬度列,会在查询操作中导致效率低下。为此,强烈建议使用geometrygeography数据类型,它们将两个坐标封装在一个字段中。

利用ST_DWithin高效进行邻近查询

ST_DWithin是一个强大的函数,可以直接检查两个几何图形是否在指定的距离内。 通过将搜索半径转换为米,并将其与使用ST_DWithin计算的距离进行比较,我们可以高效地识别所需范围内的建筑物。

<code class="language-sql">SELECT name, long, lat
FROM building
WHERE ST_DWithin(
  ST_GEOMETRY_FROM_TEXT('POINT(-84.38653999999998,33.72024)'),
  ST_POINT(long, lat),
  8046.72
);
-- 8046.72 米 = 5 英里</code>
登录后复制

使用ST_Distance处理转换后的英里距离

或者,可以使用ST_Distance计算几何图形之间的距离。输出结果最初以米为单位,但我们可以使用简单的乘法因子将其转换为英里:

<code class="language-sql">SELECT name, long, lat,
  ST_Distance(
    ST_GEOMETRY_FROM_TEXT('POINT(-84.38653999999998,33.72024)'),
    ST_POINT(long, lat)
  ) * 0.000621371 AS distance
FROM building
WHERE distance < 5;</code>
登录后复制

注意: 使用ST_Distance时,必须通过使用索引来高效地处理空间查询。虽然ST_Distance本身不支持索引,但在ST_GEOMETRY上创建空间索引可以优化整体查询性能。

总结

通过探索替代方法并强调数据表示优化,我们展示了高效检索指定范围内的建筑物的方法。本文提出的技术为实际应用中的空间查询提供了可扩展性和性能改进。

以上是如何高效地查找给定点 5 英里范围内的所有建筑物?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板