mysql经纬度计算范围_MySQL计算经纬度距离、获取距离范围内的数据 1KM 3KM 5KM
时间: 2023-11-07 20:05:11 浏览: 174
MySQL可以通过以下公式计算经纬度距离:
```
distance = 2 * asin(sqrt(pow(sin((lat1 - lat2) / 2), 2) + cos(lat1) * cos(lat2) * pow(sin((lng1 - lng2) / 2), 2))) * 6378.137
```
其中,lat1和lng1是参照点的纬度和经度,lat2和lng2是要计算距离的点的纬度和经度,6378.137是地球的半径(单位是公里)。
可以把这个公式写成MySQL函数的形式,方便后续的调用。下面是一个示例函数:
```
DROP FUNCTION IF EXISTS `getDistance`;
CREATE FUNCTION `getDistance`(lat1 DOUBLE, lng1 DOUBLE, lat2 DOUBLE, lng2 DOUBLE) RETURNS double
BEGIN
DECLARE distance DOUBLE;
SET distance = 2 * ASIN(SQRT(POW(SIN((lat1 - lat2) / 2), 2) + COS(lat1) * COS(lat2) * POW(SIN((lng1 - lng2) / 2), 2))) * 6378.137;
RETURN distance;
END;
```
使用这个函数可以计算两个经纬度之间的距离,例如:
```
SELECT getDistance(39.9087, 116.3974, 31.2222, 121.4581);
```
这个查询将返回北京和上海之间的距离(单位是公里)。
如果要获取距离范围内的数据,可以结合MySQL的WHERE子句和上面的函数来实现。例如:
```
SELECT *
FROM my_table
WHERE getDistance(lat1, lng1, lat2, lng2) <= 5; -- 获取距离参照点(lat1, lng1) 5公里范围内的数据
```
这个查询将返回从参照点(lat1, lng1)开始,距离在5公里以内的数据。
阅读全文