koa + sequelize做距离计算(MySql篇)
1.核心思路
1.利用sequelize的fn方法调用MySql原生函数(st_distance_sphere、point)
2.这里利用到了MySql的原生函数,不懂可以去看看mysql的函数知识
2.核心代码
//st_distance_sphere、point函数用来计算当前经纬度和目的地经纬度
//col为获取表头的字段名
//最后将计算完的值命名为"distance"
fn('st_distance_sphere' , fn('point', col('lng'), col('lat')) , fn('point', lng , lat) ) , "distance" //示例
fn('st_distance_sphere' , fn('point', col('需要查询经度'), col('需要查询纬度')) , fn('point', 你的经度, 你的纬度) ) , "distance"
3.完整代码
const FindAll = async (ctx) => {try {const { pageNum, pageSize , lng , lat } = ctx.query;if (!pageNum && !pageSize) {return ctx.app.emit('error', parameterMissingError, ctx)}const res = await Works.findAndCountAll({raw: true,nest: true,attributes:{include:[// 原生函数计算距离[ fn('st_distance_sphere' , fn('point', col('lng'), col('lat')) , fn('point', lng , lat) ) , "distance" ]] },include: [{as: 'user',model: User,attributes: ['nickName']}],limit: pageSize * 1,offset: (pageNum - 1) * pageSize * 1,order: [//根据距离排序[ fn('st_distance_sphere' , fn('point', col('lng'), col('lat')) , fn('point', lng , lat) ) , 'DESC' ]],})ctx.body = { code: 200, msg: '查询成功', data: res }} catch (err) {console.log(err)return ctx.app.emit('error', findError, ctx)}
}
4.效果展示
distance就是查询到的参数,需要用parseFloat((distance/1000).toFixed(2)) ; 转成km和保存两位小数