在位置服务(LBS)系统中,基于地理位置查询和距离计算是核心功能之一。例如:
- 查找附近的商铺、加油站或医院。
- 计算两点之间的实际直线距离。
- 筛选出指定范围内的用户或设备位置。
MySQL 提供了多种方式实现地理位置查询,包括 ST_Distance_Sphere()
和经典的 Haversine 公式。本文将介绍如何使用这两种方式在 MySQL 中进行距离计算与位置筛选。
一、经纬度距离计算原理
1. 地球模型与球面距离
二、方法 1:使用 ST_Distance_Sphere()
计算球面距离
函数介绍
ST_Distance_Sphere(point1, point2)
直接返回两点之间的球面距离,结果以米为单位。POINT(lng, lat)
将经纬度转换为点对象。
案例 1:计算两点之间的直线距离
需求:
计算从北京天安门到上海外滩的直线距离。
天安门坐标:(39.9087, 116.3975)
外滩坐标:(31.2335, 121.4920)
SQL 实现
SELECT ST_Distance_Sphere(
POINT(116.3975, 39.9087),
POINT(121.4920, 31.2335)
) AS distance_meters;
查询结果
distance_meters |
---|
1064695.78 |
解释:
- 结果显示北京到上海外滩的直线距离约为 1064 公里。
POINT(lng, lat)
将经纬度转换为地理点,ST_Distance_Sphere
计算两点的球面距离。
案例 2:查询当前位置 5 公里范围内的商铺
需求:
查询距离当前定位(广州塔 23.1056, 113.3248
)5 公里范围内的商铺信息。
<