今天,日月教大家如何使用mysql根据经纬度实现距离排序搜索查询,话不多说,往下看。
为了节省时间,我们在SpringBoot 集成 mybatis的四种方式 中方式二的项目基础上修改。
一、创建数据表,插入测试数据
经纬度获取方式:https://lbs.amap.com/console/show/picker
根据上图,我们可以明显的看出,根据当前所在地按距离排序的话,应该是
武汉–>黄冈–>咸宁–>九江 这样的顺序。
二、创建mysql函数
计算两个经纬度之间距离的 数据库函数
CREATE FUNCTION `lat_lng_distance` (lat1 FLOAT, lng1 FLOAT, lat2 FLOAT, lng2 FLOAT)
RETURNS FLOAT
DETERMINISTIC
BEGIN
RETURN 6371 * 2 * ASIN(SQRT(
POWER(SIN((lat1 - abs(lat2)) * pi()/180 / 2),
2) + COS(lat1 * pi()/180 ) * COS(abs(lat2) *
pi()/180) * POWER(SIN((lng1 - lng2) *
pi()/180 / 2), 2) ));
END
三、编写测试代码
SpringBootController.java
package com.chenqi.springboot.controller;
import com.chenqi.springboot.entity.Store;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.Get