小程序里显示附近的人,云开发数据库实现附近的人,按照位置远近排序,附近多少公里内的好友

简介: 小程序里显示附近的人,云开发数据库实现附近的人,按照位置远近排序,附近多少公里内的好友

老规矩,先看效果图


可以看到我们在地图上显示了附近的一些标记点。


接下来就教大家如何实现附近的位置。


一,创建数据


首先我们查询附近的人的时候,需要先有附近人的位置,也就是经纬度。这里我以几个城市的经纬度为例。

大家可以自行百度查找你所需要的经纬度。

这里经纬度查到后,我们需要把这些位置信息存到数据库里。


1,注意存位置时必须是Point类型


如上图所示,我们可以直接在云开发数据库里添加位置信息,类型是geopoint类型。

如我添加的北京的位置如下

这里按照这样的类型,自己多添加几个城市的经纬度。当然现实开发中,应该是添加附近人的位置(经纬度)


2,批量添加(选看)


如果感觉一个添加比较麻烦的话,可以先添加一条,然后导出为json,自己在json里批量编辑。

一定要注意_id不能重复,格式要保持一致。这样你批量编辑后,再把这个json重新导入到数据即可。

批量导入不是本节的重点,就不在讲解。我这里默认你已经添加好位置信息了


二,查找附近的人


我们查找附近的人,肯定是想按照排序由近到远的显示附近的人在地图上,所以这里我们就要用到geoNear做聚合查询。

geonear查询有两种方式,建议大家用Aggregate.geoNear

详细介绍大家可以自己去看官方文档

https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-sdk-api/database/aggregate/Aggregate.geoNear.html

用这个的主要好处是,我们可以拿到附近人离自己的距离

这个距离在做附近的人时很重要的。既然可以直接拿到,能省很多事的。具体的代码后面给大家列出来,我们先继续往下学习


三,获取当前的位置


我们要做附近的人肯定要先获取自己的位置,获取自己的位置就用wx.getLocation即可,对应文档如下

https://developers.weixin.qq.com/miniprogram/dev/api/location/wx.getLocation.html

这个使用之前必须要在app.json里注册权限,如果不注册权限,就会报如下提示

所以在app.json里写如下代码


"permission": {
    "scope.userLocation": {
      "desc": "获取位置所需要的权限"
    }
  }


四,获取附近人的经纬度


代码其实很简单,如下

这样我们就可以按照由近到远的顺序获取附近的人了,结果如下

石头哥是在杭州,可以看到几个城市里离杭州最近的是上海159公里的距离。


五,在地图上显示附近的人


既然位置都已经查询到了,我们就可以在地图上显示了,地图上显示用到了map组件的markers

对应的js代码如下

下面我把完整的代码贴出来给到大家


wxml代码

<map markers="{{markers}}" show-location scale="4" 
style="height: 100vh;" />

js代码

Page({
  data: {
    markers: []
  },
  onLoad() {
    wx.getLocation({ //1,获取自己的位置
      type: 'wgs84',
      success: res => {
        const latitude = res.latitude
        const longitude = res.longitude
        console.log('当前在杭州的经纬度', res.longitude, res.latitude)
        //2,查找附近的人
        let markers = []
        const db = wx.cloud.database()
        const $ = db.command.aggregate
        db.collection('location').aggregate()
          .geoNear({
            distanceField: 'juli', // 与给定点的距离
            spherical: true,
            near: db.Geo.Point(longitude, latitude), //当前自己的位置
          }).end()
          .then(res => {
            console.log('位置', res)
            res.list.forEach(item => {
              markers.push({
                longitude: item.location.coordinates[0],
                latitude: item.location.coordinates[1]
              })
            })
            // 地图上的标记点
            this.setData({
              markers
            })
          })
      }
    })
  }
})

好了,到这里就带大家完整的实现了地图上显示附近人的功能了。如果觉得石头哥文章还不错,欢迎关注点赞。


相关文章
|
9天前
|
SQL 数据库
数据库开发之子查询案例的详细解析
数据库开发之子查询案例的详细解析
12 0
|
9天前
|
SQL 数据库
数据库开发之子查询的详细解析
数据库开发之子查询的详细解析
18 0
|
9天前
|
SQL 存储 数据库
数据库开发表操作案例的详细解析
数据库开发表操作案例的详细解析
7 0
|
9天前
|
SQL 存储 关系型数据库
数据库开发之图形化工具以及表操作的详细解析
数据库开发之图形化工具以及表操作的详细解析
26 0
|
9天前
|
SQL 关系型数据库 MySQL
数据库开发之SQL简介以及DDL的详细解析
数据库开发之SQL简介以及DDL的详细解析
24 0
|
19天前
|
小程序 前端开发 API
小程序全栈开发中的多端适配与响应式布局
【4月更文挑战第12天】本文探讨了小程序全栈开发中的多端适配与响应式布局。多端适配涉及平台和设备适应,确保统一用户体验;响应式布局利用媒体查询和弹性布局维持不同设备的布局一致性。实践中,开发者可借助跨平台框架实现多平台开发,运用响应式布局技术适应不同设备。同时,注意兼容性、性能优化和用户体验,以提升小程序质量和用户体验。通过这些方法,开发者能更好地掌握小程序全栈开发。
|
19天前
|
小程序 前端开发 API
微信小程序全栈开发中的异常处理与日志记录
【4月更文挑战第12天】本文探讨了微信小程序全栈开发中的异常处理和日志记录,强调其对确保应用稳定性和用户体验的重要性。异常处理涵盖前端(网络、页面跳转、用户输入、逻辑异常)和后端(数据库、API、业务逻辑)方面;日志记录则关注关键操作和异常情况的追踪。实践中,前端可利用try-catch处理异常,后端借助日志框架记录异常,同时采用集中式日志管理工具提升分析效率。开发者应注意安全性、性能和团队协作,以优化异常处理与日志记录流程。
|
19天前
|
小程序 安全 数据安全/隐私保护
微信小程序全栈开发中的身份认证与授权机制
【4月更文挑战第12天】本文探讨了微信小程序全栈开发中的身份认证与授权机制。身份认证包括手机号验证、微信登录和第三方登录,而授权机制涉及角色权限控制、ACL和OAuth 2.0。实践中,开发者可利用微信登录获取用户信息,集成第三方登录,以及实施角色和ACL进行权限控制。注意点包括安全性、用户体验和合规性,以保障小程序的安全运行和良好体验。通过这些方法,开发者能有效掌握小程序全栈开发技术。
|
19天前
|
小程序 前端开发 安全
小程序全栈开发中的跨域问题及其解决方案
【4月更文挑战第12天】本文探讨了小程序全栈开发中的跨域问题及其解决方案。跨域问题源于浏览器安全策略,主要体现在前后端分离、第三方服务集成和数据共享上。为解决此问题,开发者可采用CORS、JSONP、代理服务器、数据交换格式和域名策略等方法。实践中需注意安全性、兼容性和性能。通过掌握这些解决方案,开发者能更好地处理小程序的跨域问题,提升用户体验。
|
9天前
|
SQL 存储 关系型数据库
数据库开发之mysql前言以及详细解析
数据库开发之mysql前言以及详细解析
18 0

热门文章

最新文章