当前位置: 首页 > article >正文

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和保存两位小数


http://www.kler.cn/a/379559.html

相关文章:

  • ES跟Kafka集成
  • bert-base-chinese模型使用教程
  • H265编码丢帧问题分析
  • 杨传辉:云+AI 时代的一体化数据库|OceanBase发布会实录
  • torchvision.io.write_video 报错替换
  • 2024年大厂AI大模型面试题精选与答案解析
  • 使用WordPress快速搭建个人网站
  • 汽车电子行业数字化转型的实践与探索——以盈趣汽车电子为例
  • Python酷库之旅-第三方库Pandas(193)
  • 【工具变量】中国制造2025试点城市数据集(2000-2023年)
  • Maven核心概念
  • Linux-计算机网络-epoll的LT,ET模式
  • 力扣150:逆波兰表达式求值
  • 使用Web Workers实现JavaScript的多线程编程
  • 【WebRTC】WebRTC的简单使用
  • 【嵌入式面试高频知识点】-MQTT协议
  • 【appium 安卓10 QQ发送消息】
  • 不用买PSP,画质甚至更好,这款免费神器让你玩遍经典游戏
  • 基于卷积神经网络的棉花病虫害识别与防治系统,resnet50,mobilenet模型【pytorch框架+python源码】
  • Spring的常用注解之@Component——day1
  • 【Keyframes】Deep Convolutional Pooling Transformer for Deepfake Detection
  • 【VMware】使用笔记
  • STL:标准模板库
  • Ubuntu 22.4 LTS 源码编译Tigervnc
  • 【P2-9】ESP8266 WIFI模块在STA模式下作为TCP客户端上电自动进入透传数据模式
  • javaNIO核心知识.中