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和保存两位小数
原文地址:https://blog.csdn.net/qq_32058147/article/details/143471592
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mrgr.cn/news/65113.html 如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mrgr.cn/news/65113.html 如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!