实现思路 :

  1. 获取用户当前位置经纬度坐标
  2. 查询动态时将经纬度坐标传给后台
  3. 后端通过sql语句计算经纬度坐标之间的距离
      // 附近20公里发的动态  按时间排序
let sql = `SELECT *
, ROUND(6378.138 * 2 * ASIN(SQRT(POW(SIN((${myLatitude} * PI() / 180 - latitude * PI() / 180) / 2), 2) + COS(${myLatitude} * PI() / 180) * COS(latitude * PI() / 180) * POW(SIN((${myLongitude} * PI() / 180 - longitude * PI() / 180) / 2), 2))) * 1000) AS distance
FROM tb_group_posts having distance <= 20000 and status=? ORDER BY createtime desc LIMIT ?, ?`;
result = await this.app.mysql.query(sql, ['0', (pageNum - 1) * pageSize, pageSize]);

说明:6378.138这个是地球的直径,单位千米.myLatitude 是用户位置的纬度,myLongitude是用户位置经度.latitude 为动态的纬度字段,longitude为动态的经度字段。

这里通过having distance <= 20000来查询附近20公里以内的动态,然后动态根据时间倒序展示

mysql having和where的区别

having子句与where子句一样,都是用于条件判断的。

  1. 区别1

    where是判断数据从磁盘读入内存的时候

    having是判断分组统计之前的所有条件
  2. 区别2

    having子句中可以使用字段别名,而where不能使用
  3. 区别3

    having能够使用统计函数,但是where不能使用

实现效果图

nodejs--根据坐标算距离

以上是通过sql的方式计算距离,也可以通过在程序中进行计算,这里提供nodejs中的计算方式

var EARTH_RADIUS = 6378.137; //地球半径
//将用角度表示的角转换为近似相等的用弧度表示的角 java Math.toRadians
function rad(d) {
return d * Math.PI / 180.0;
}
/**
* 谷歌地图计算两个坐标点的距离
* @param lng1 经度1
* @param lat1 纬度1
* @param lng2 经度2
* @param lat2 纬度2
* @return 距离(千米)
*/
function getDistance(lng1, lat1, lng2, lat2) {
var radLat1 = rad(lat1);
var radLat2 = rad(lat2);
var a = radLat1 - radLat2;
var b = rad(lng1) - rad(lng2);
var s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2)
+ Math.cos(radLat1) * Math.cos(radLat2)
* Math.pow(Math.sin(b / 2), 2)));
s = s * EARTH_RADIUS;
s = Math.round(s * 10000) / 10000;
return s;
} // let a = distance([119.9969915847, 30.2754597274,], [119.9972383479, 30.2759230036])
// let a = distance([30.2822920169, 125.0036899474], [30.2818472718, 120.0034646419])
let a = getDistance(30.27895275, 119.9921260576, 30.2832692396, 120.0249984587)
console.log(a)

参考阅读

https://blog.csdn.net/qq_27238185/article/details/80339653

https://www.cnblogs.com/jiafuwei/p/5699091.html

小程序开发笔记【五】---基于LBS附近动态查询的更多相关文章

  1. 微信小程序开发笔记02

    今天学习了微信小程序开发用到的语言,wxml与wxss语言基本语法与html和css基本语法相似,学习起来相对简单.在小程序主要的语言是js(javascript,跟准确的说是jqery) ,由于这种 ...

  2. 微信小程序开发笔记01

    微信小程序开发的优势 1,不用安装,即开即用,用完就走.省流量,省安装时间,不占用桌面: 2,体验上虽然没法完全媲美原生APP,但综合考虑还是更优: 3,对于小程序拥有者来说,开发成本更低,他们可以更 ...

  3. 微信小程序开发系列五:微信小程序中如何响应用户输入事件

    微信小程序开发系列教程 微信小程序开发系列一:微信小程序的申请和开发环境的搭建 微信小程序开发系列二:微信小程序的视图设计 微信小程序开发系列三:微信小程序的调试方法 微信小程序开发系列四:微信小程序 ...

  4. 微信小程序开发笔记(一)

    一.为什么要学习微信小程序开发 微信小程序是一个可以在微信上打开的轻应用,他是由多个页面组成的程序,跟传统APP比较如下: 优点 1.不需要在应用商店下载,不占用内存空间,即开即用 2.可以在微信内直 ...

  5. 微信小程序开发笔记

    前言: 因为前段时间一直在做关于微信小程序方面的项目,作为一名后端的攻城狮而言做一些简单的前端页面数据操作和管理还是比较容易快上手的,当然前提是要理解微信小程序的基本语法和请求原理.该篇博客主要记录的 ...

  6. 微信小程序开发笔记04

    今天将小程序的页面进行优化 消除昨天遇到的bug问题. 完成了微信小程序的开发.

  7. 微信小程序开发(五)开发框架MINA

    微信团队为小程序提供的框架命名为MINA应用框架.MINA框架通过封装微信客户端提供的文件系统.网络通信.任务管理.数据安全等基础功能,对上层提供一整套JavaScript API,让开发者能够非常方 ...

  8. 微信小程序开发笔记(二)

    一.前言 继承上一篇所说的,有了对微信小程序的基础概念后,这边将会示范动手做一个小程序,在动手的过程中我们可以更快的熟悉小程序里面的架构和开发流程. 二.小程序的设计 这次要做的是一个猜数字的程序,程 ...

  9. 微信小程序学习笔记五 常见组件

    1. 常见组件 重点讲解小程序中常用的布局组件 1.1 view 代替 原来的div标签 <!-- pages/index/index.wxml --> <view hover-cl ...

  10. 小程序学习笔记五:API

    API 小程序提供了丰富的微信原生API,可以方便的调起微信提供的能力,如获取用户信息,本地存储,支付功能等. api调用格式: 1:wx.on 开头的 API 是监听某个事件发生的API接口,接受一 ...

随机推荐

  1. js-深拷贝浅拷贝

    深拷贝浅拷贝可以考察一个人的很多方面,例如:基本功,逻辑能力,编码能力: 在实际工作中的应用:比如用于页面展示的数据状态,与需要传给后端的数据包中,有部分字段的值不一致的话,就需要在传参时根据接口文档 ...

  2. JS-21点游戏

    //21点游戏 let readline=require("readline-sync"); //清屏函数 let clear=()=>process.stdout.writ ...

  3. Python3返回函数

    函数作为返回值 高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回. 我们来实现一个可变参数的求和.通常情况下,求和的函数是这样定义的: def calc_sum(*args): ax = ...

  4. centos7.2下安装mysql5.7数据库

    服务器上的mysql安装了一个8.0.12版本的,本地的是一个5.7版本的,今天删除了重新安装的5.7版本的,下面是所有的名命令 跟着走就会安装上了.   配置源 wget http://dev.my ...

  5. SQL中的连接(极客时间)

    SQL中的连接 关系型数据库的核心之一就是连接, 而在不同的标准中, 连接的写法上可能有区别, 最为主要的两个SQL标准就是SQL92和SQL99了, 后面的数字表示的是标准提出的时间. SQL92中 ...

  6. vue导出文件下载

    项目当中有用到文件的导出功能,以此来总结 request({ /*url: this.exportUrl,*/ url: `************`, method: "GET" ...

  7. Rust中的控制结构

    fn main() { let number = ; { println!("condition was true"); } else { println!("condi ...

  8. HBuilder创建app 基础

    一.了解HBuilder HBuilder内封装了大量的书籍,极大方便了使用 官方文档: http://dev.dcloud.net.cn/mui/ui/ 关于布局: mhead  表头.mbody ...

  9. 201871010106-丁宣元 《面向对象程序设计(java)》第十一周学习总结

    201871010106-丁宣元 <面向对象程序设计(java)>第十一周学习总结 正文开头: 项目 内容 这个作业属于哪个课程 https://home.cnblogs.com/u/nw ...

  10. Spring Data Solr创建动态域报错:org.springframework.data.solr.UncategorizedSolrException

    今天在项目中使用Spring Data Solr导入动态域数据报错, 控制台打印错误信息如下 Exception in thread "main" org.springframew ...