You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在AWS Athena中查询指定坐标5公里范围内的所有门店

Athena查询指定坐标5公里范围内门店的方法

Athena基于Trino/Presto引擎,内置地理空间计算函数,直接调用内置函数即可实现距离筛选,不需要手动编写复杂的球面距离计算公式。

  • 核心使用ST_Distance函数计算两点间的地表真实距离,返回值单位为米,5公里对应的筛选阈值为5000。
  • 所有地理点构造必须遵循「经度在前、纬度在后」的规则,和日常口语里说的“经纬度”顺序相反,不要写反否则会定位到错误位置。

你附的参考坐标截图如下:
示例参考坐标
对应经纬度为经度72.8777、纬度19.0760,下面的SQL示例基于该坐标编写,更换目标坐标时直接替换对应数值即可。

不同表结构对应的SQL写法

场景1:location字段本身是GEOMETRY点类型

如果建表时已经把location定义为地理空间点类型,直接运行以下SQL即可:

SELECT name
FROM stores
WHERE ST_Distance(
  ST_Point(72.8777, 19.0760), -- 此处依次传入目标点的经度、纬度
  location
) <= 5000;

场景2:location字段存储WKT格式字符串

如果location是字符串类型、存的是标准WKT格式的点数据(例如内容为POINT(72.87 19.07)),需要先转成几何类型再计算:

SELECT name
FROM stores
WHERE ST_Distance(
  ST_Point(72.8777, 19.0760), -- 替换为你的目标坐标
  ST_GeomFromText(location)
) <= 5000;

场景3:经纬度拆成独立字段存储

如果你的表里没有统一的location字段,是把经度、纬度存在两个独立数值字段(比如字段名是lng、lat),直接在SQL里构造点即可:

SELECT name
FROM stores
WHERE ST_Distance(
  ST_Point(72.8777, 19.0760), -- 替换为你的目标坐标
  ST_Point(lng, lat)
) <= 5000;

注意事项

  • 所有坐标必须统一使用WGS84坐标系(即普通GPS设备输出的原始经纬度),如果使用国内地图平台偏移后的火星坐标、百度坐标,计算结果会存在几百米到数公里的误差。
  • 如果需要调整搜索半径,直接修改WHERE子句里的阈值即可,比如搜10公里范围就把5000改成10000。

内容的提问来源于stack exchange,提问作者Rahul Diggi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 23:03:24