koa + sequelize做距离计算(MySql篇)

1.核心思路

1.利用sequelize的fn方法调用MySql原生函数(ST_Distance_Sphere 、POINT)

2.通MOD过函数将查询到的距离除以1000,这样km就变成了米 ,利用FOMAT函数将查询到的结果精确到两位小数

3.这里利用到了MySql的原生函数,不懂可以去看看mysql的函数知识

2.核心代码

//FORMAT函数保存位置后两位小数
//MOD函数将米转换成KM
//ST_Distance_Sphere、POINT函数用来计算当前经纬度和目的地经纬度
//col为获取表头的字段名
//最后将计算完的值命名为"distance"
 fn('FORMAT' ,  fn('MOD' ,  fn('ST_Distance_Sphere', fn('POINT',     col('lng'), col('lat')) ,  fn('POINT', lng , lat)  )  , 1000 )  , 2)  , "distance" 


//示例
 fn('FORMAT' ,  fn('MOD' ,  fn('ST_Distance_Sphere', fn('POINT',     col('数据库经度'), col('数据库纬度')) ,  fn('POINT', 你的经度, 你的纬度)  )  , 1000 )  , 2)  , "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: [
                [
                  fn('FORMAT' ,  fn('MOD' ,  fn('ST_Distance_Sphere', fn('POINT', col('lng'), col('lat')) ,  fn('POINT', lng , lat)  )  , 1000 )  , 2)  , "distance" 
                ]
            ],
            include: [{
                as: 'user',
                model: User,
                attributes: ['nickName']
            }],
            limit: pageSize * 1,
            offset: (pageNum - 1) * pageSize * 1,
            order: [['createdAt', 'DESC']],
        })
        ctx.body = { code: 200, msg: '查询成功', data: res }
    } catch (err) {
        console.log(err)
        return ctx.app.emit('error', findError, ctx)
    }
}

4.效果展示

distance就是查询到的参数

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/907614.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Oracle APEX开发小技巧10】CSS样式控制交互式报表列宽和自动换行效果

在实际开发中使用交互式报表可能会出现某些字段的列宽过长,某些字段的列宽只有缩到一角的情况,那么如何解决这种情况呢?有没有方法可以控制交互式报表的列宽呢?下面就来介绍一下解决方法: 页设置-页-CSS-内嵌 输入如下…

IO详解(BIO、NIO、实战案例、底层原理刨析)

文章目录 IO详解(BIO、NIO、实战案例、底层原理刨析)🌎 IO🪐 同步、异步、阻塞、非阻塞⚡ BIO👽 简介😎 案例 🚀 NIO✈️ 介绍🚗 Buffer(缓冲)🛸 …

#渗透测试#SRC漏洞挖掘# 信息收集-Shodan之搜索语法进阶

免责声明 本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停…

Python复习1:

一、数据类型 1.数字:int、float、bool 2.字符串:string 3.列表:list 4.集合:set 5.字典:dictionary 二、Test 1.print输出固定格式 num110 str1"hello world" #输出的固定格式 print("num1%d&…

【MyBatis源码】BoundSql分析

基础 BoundSql是对SQL语句及参数信息的封装,它是SqlSource解析后的结果。Executor组件并不是直接通过StaticSqlSource对象完成数据库操作的,而是与BoundSql交互。BoundSql是对Executor组件执行SQL信息的封装,具体实现代码如下: …

Python爬虫抓取三个网站上的英语每日一句

一、引言 大学英语学习需要巩固高中语法,补充四六级词汇,增加英语语感,提升英语的运用能力。学好英语有很多种方法,采用句子来突破英语语法、词汇、口语和听力的方法简单有效,值得提倡。李阳就是采用这种方法来教授英…

三相LCL并网逆变器—为什么采用LCL滤波器

1.为什么需要滤波器 当前并网逆变器大多采用脉冲宽度调制(PWM)技术,导致桥臂输出的电压中存在开关频率及倍数频率次的谐波电压,进而使得输出到电网的电流中含有谐波。从电网的角度来看,是不希望系统内含有高次谐波的,因为这会影响…

【STM32】按键控制LED 光敏传感器控制蜂鸣器

文章目录 前置知识按键介绍传感器模块硬件电路按键硬件电路传感器模块硬件电路 C语言数据类型在Keil中的对应写法C语言枚举 按键控制LED接线图Hardware文件夹(模块化编程)LED驱动程序封装Key(按键)驱动程序封装 main.c源文件 光敏传感器控制蜂鸣器接线图…

飞书API-获取tenant_access_token

1.在飞书工作台创建应用,跳到开发者后台,选创建企业自建应用 2.设置并发布应用 必须要发布应用才可以开始使用了!!! 3.调用获取token的API 参考链接: 开发文档 - 飞书开放平台https://open.feishu.cn/do…

SpringBoot篇(自动装配原理)

目录 一、自动装配机制 1. 简介 2. 自动装配主要依靠三个核心的关键技术 3. run()方法加载启动类 4. 注解SpringBootApplication包含了多个注解 4.1 SpringBootConfiguration 4.2 ComponentScan 4.3 EnableAutoConfiguration 5. SpringBootApplication一共做了三件事 …

Rust 力扣 - 48. 旋转图像

文章目录 题目描述题解思路题解代码题目链接 题目描述 题解思路 我们可以将原矩阵进行水平翻转&#xff0c;然后在沿主对角线进行翻转&#xff0c;就能完成原矩阵沿顺时针方向旋转90o的变换 题解代码 impl Solution {pub fn rotate(matrix: &mut Vec<Vec<i32>&…

ima.copilot:智慧因你而生

在数字化时代&#xff0c;信息的获取、处理和创作已经成为我们日常工作和学习中不可或缺的一部分。腾讯公司推出的ima.copilot&#xff08;简称ima&#xff09;正是为了满足这一需求&#xff0c;它是一款由腾讯混元大模型提供技术支持的智能工作台产品&#xff0c;旨在通过智能…

使用 PyCharm 构建 FastAPI 项目:零基础入门 Web API 开发

使用 PyCharm 构建 FastAPI 项目&#xff1a;零基础入门 Web API 开发 本文提供了一份完整的 FastAPI 入门指南&#xff0c;涵盖从环境搭建、依赖安装到创建并运行一个简单的 FastAPI 应用的各个步骤。通过 FastAPI 和 Uvicorn&#xff0c;开发者可以快速构建现代化的 Web API…

练习LabVIEW第三十五题

学习目标&#xff1a; 刚学了LabVIEW&#xff0c;在网上找了些题&#xff0c;练习一下LabVIEW&#xff0c;有不对不好不足的地方欢迎指正&#xff01; 第三十五题&#xff1a; 使用labview模拟一个3-8译码器 开始编写&#xff1a; 用LabVIEW做3-8译码器首先要知道它是个啥…

【流量控制】之创建和管理前缀列表

前缀列表是包含一个或多个CIDR地址块的集合。您可以自主创建前缀列表并对其进行管理。在创建过程中&#xff0c;您可以将现有的前缀列表克隆&#xff08;复制&#xff09;到指定地域&#xff08;同地域或跨地域&#xff09;&#xff0c;让操作更加便捷。本文介绍如何使用专有网…

数据库作业5

1&#xff0c;建立触发器&#xff0c;订单表中增加订单数量后&#xff0c;商品表商品数量同步减少对应的商品订单出数量,并测试 测试&#xff1a; 2.建立触发器&#xff0c;实现功能:客户取消订单&#xff0c;恢复商品表对应商品的数量 测试 3.建立触发器&#xff0c;实现功能:…

Spring Boot 注解大全:全面解析 Spring Boot 常用注解及其应用场景

Spring Boot 注解大全:全面解析 Spring Boot 常用注解及其应用场景 简介 Spring Boot 是一个基于 Spring 框架的简化开发框架,它旨在简化 Spring 应用的初始搭建和开发过程。Spring Boot 提供了一系列的注解,使得开发者可以更加方便地进行应用开发和配置。本文将详细介绍 S…

11.3比赛总结

Bricks 1.题意&#xff1a;有一个由 B 和 W 组成的字符串&#xff0c;要将它划分成尽量多的区间&#xff0c;并使得每个区间中 B 和 W 的比例相等。 2.一道贪心题。首先特殊处理比值恒为 0 和不存在比值的情况&#xff0c;也就是全是 W 或者 B&#xff0c;明显这两种情况下每…

excel自定义导出实现(使用反射)

前言 项目中接到需求&#xff0c;需要对导出的字段进行自定义导出 &#xff0c;用户可在前端选择自定义导出的字段&#xff08;如图&#xff09;&#xff0c;实现过程做以下记录&#xff0c;仅供参考&#xff1b; 思路 跟前端约定好所有要导出的字段名称(headName)跟对应的…

“游戏人”也能拿诺贝尔奖!

“游戏人”也能拿诺贝尔奖&#xff01; 点击蓝链领取游戏开发教程 2024年度的诺贝尔奖&#xff0c;堪称AI深刻影响传统科学领域的一次生动展现。在这一年里&#xff0c;备受瞩目的诺贝尔物理学奖与诺贝尔化学奖两大核心奖项&#xff0c;均颁给了在AI领域做出杰出贡献的研究者…