基于当前经纬度与2公里半径获取最大经纬度的技术问询
基于中心点经纬度与半径筛选范围内地点的SQL实现
嘿,这里有个实用的SQL方案,能帮你基于给定的中心点经纬度和2单位半径(注意看下面的单位说明),筛选出该范围内的地点,还会计算每个地点到中心点的距离并按距离排序:
SELECT id, LATITUDE, LONGITUDE, distance FROM ( SELECT a.hosp_seq_id, LATITUDE, LONGITUDE, (3959 * ACOS(COS(RADIANS(LATITUDE)) * COS(RADIANS(mylat)) * COS(RADIANS(LONGITUDE) - RADIANS(mylng)) + SIN(RADIANS(LATITUDE)) * SIN(RADIANS(mylat)) )) AS distance, b.mydst FROM app.tpa_hosp_info a JOIN ( SELECT 12.561 AS mylat, 77.48 AS mylng, 2 AS mydst FROM DUAL )b ON (1 = 1) WHERE LATITUDE >= mylat -(mydst/69) AND LATITUDE <= mylat +(mydst/69) AND LONGITUDE >= mylng -(mydst/(69 * COS(RADIANS(mylat)))) AND LONGITUDE <= mylng +(mydst/(69 * COS(RADIANS(mylat)))) )a WHERE distance <= mydst ORDER BY distance
关键细节说明:
- 预过滤优化:内层WHERE子句先通过经纬度范围缩小查询范围,避免对全表计算距离,大幅提升查询效率。这里的
69是1纬度对应的英里数,如果你需要用公里作为单位,得把69换成111(1纬度≈111公里),同时把距离计算里的3959(地球半径英里数)换成6371(地球半径公里数)。 - 距离计算逻辑:采用Haversine公式计算球面距离,能准确适配地球曲面的距离测算需求。
- 自定义参数:你只需修改子查询
b里的mylat(中心点纬度)、mylng(中心点经度)和mydst(半径数值),就能快速适配自己的业务场景。 - 排序逻辑:最终结果按距离从小到大排序,方便你优先查看离中心点最近的地点。
内容的提问来源于stack exchange,提问作者PRADHAN GOWDA MJ
相关产品推荐
相关产品推荐

