sql通过经纬度获取几公里范围内的数据

创建表,存储经纬度信息

项目中使用了高德地图,新增时将经度,纬度存入到数据库,数据库中我保留了6位小数.

实现

需求:通过给定的一个位置(坐标)和距离,查询到已这个距离为半径内所有的店铺.
前台需要传(经度,纬度,距离)三个参数,

	String latitude = (String) params.get("latitude");//纬度
	String longitude = (String) params.get("longitude");//经度
	String distance = (String) params.get("distance");//距离
	List<StoreEntity> list = storeService.nearbyStore(latitude, longitude, distance);

主要的代码逻辑就是在sql语句中,可以直接套用,将#{}内的参数改掉就可以,如下:

<select id="nearbyStore" resultType="返回实体的坐标位置">
    select * from store where (acos(sin((#{latitude}*3.1415)/180)
    * sin((latitude*3.1415)/180) + cos((#{latitude}*3.1415)/180)
    * cos((latitude*3.1415)/180) * cos((#{longitude}*3.1415)/180
    - (longitude*3.1415)/180))*6370.996)<![CDATA[<]]> #{distance}
</select>

这么简单就实现了.将列表返回到前台,前台做处理.
前台使用了vue-amap插件里的圆形处理,前台点击传参等不在这叙述

最终实现

在这里插入图片描述

说明

该需求没有实际投入到项目中,所以仅限参考


版权声明:本文为weixin_44939996原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。