prisma 结合 mongodb 查询地理空间坐标,实现 “附近的人”功能

这篇具有很好参考价值的文章主要介绍了prisma 结合 mongodb 查询地理空间坐标,实现 “附近的人”功能。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言:我们创建一个集合,添加测试数据,并执行 mongodb 的地理空间查询,返回需要的数据。

1、通过schema.prisma, 创建 store 集合

prisma 结合 mongodb 查询地理空间坐标,实现 “附近的人”功能

2、通过 prisma/client ,插入 几条测试数据
  // 构造测试数据
  createList: async () => {
    await prisma.store.createMany({
      data: [
        { name: '三里屯MM1', location: { type: 'Point', coordinates: [116.458347, 39.940602] } },
        { name: '西直门GG1', location: { type: 'Point', coordinates: [116.361446, 39.946471] } },
        { name: '东直门MM2', location: { type: 'Point', coordinates: [116.440967, 39.945325] } },
        { name: '天安门MM3', location: { type: 'Point', coordinates: [116.403963, 39.915119] } },
        { name: '三里屯MM4', location: { type: 'Point', coordinates: [116.460054, 39.938063] } },
        { name: '三里屯MM5', location: { type: 'Point', coordinates: [116.461082, 39.944209] } },
        { name: '三里屯MM6', location: { type: 'Point', coordinates: [116.461065, 39.939399] } }

      ]
    })
  },

prisma 结合 mongodb 查询地理空间坐标,实现 “附近的人”功能
location 的数据格式为 GeoJSON,即地理位置信息的 JSON 表示法。 这里 type 指定类型为 点坐标coordinates:[] 存放经纬度数值 。 经度在前,纬度在后。

3、创建地理空间索引

在 prisma 中,使用 $runCommandRaw(),输入原生数据库命令创建索引:

    // 创建索引
   const createIndexResult = await prisma.$runCommandRaw({
     createIndexes: 'store', // 集合名称
     indexes: [{
       key: {
         "location": "2dsphere" // 索引字段和索引类型; 索引类型指定为  2dsphere
       },
       name: 'geoIndex' // 索引名称-自定义
     }]
   })

或者在 mongosh 中执行如下创建地理空间索引

db.store.createIndex( { location: "2dsphere" } ) // store 为我们创建的集合名称

4、运行地理空间查询命令
a、使用$near运算符查询,返回符合条件的数据。由近到远排序。

prisma 结合 mongodb 查询地理空间坐标,实现 “附近的人”功能

顺利查询出三里屯附近的 MM !
prisma 结合 mongodb 查询地理空间坐标,实现 “附近的人”功能

b、 使用 $genNear进行聚合查询。添加一些条件,并返回距离中心点的具体距离。

使用 prisma 提供的 aggregateRaw 方法,进行原生聚合查询
prisma 结合 mongodb 查询地理空间坐标,实现 “附近的人”功能

distance返回具体距离
prisma 结合 mongodb 查询地理空间坐标,实现 “附近的人”功能

总结:

1、MongoDB 中地理空间数据可存储为 GeoJSON 或者数组形式[]。如果是经纬度,则经度在前,纬度在后。
2、在执行地理空间查询前,需先创建索引,推荐索引类型为2dsphere
3、在 prisma 中如果使用的数据库是 mongodb, 在进行原生数据库查询时,可使用 prisma 提供的$runCommandRaw findRaw aggregateRaw 方法

mongoDB地理空间查询文档

文章参考自:https://juejin.cn/post/6981814561598865421 鸣谢~文章来源地址https://www.toymoban.com/news/detail-499495.html

到了这里,关于prisma 结合 mongodb 查询地理空间坐标,实现 “附近的人”功能的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 如何使用Redis实现附近商家查询

    🔥🔥宏夏Coding网站,致力于为编程学习者、互联网求职者提供最需要的内容!网站内容包括求职秘籍,葵花宝典(学习笔记),资源推荐等内容。在线阅读:https://hongxiac.com🔥🔥 在日常生活中,我们经常能看见查询附近商家的功能。 常见的场景有,比如你在点外卖的时候

    2024年02月12日
    浏览(29)
  • 基于MongoDB的空间数据存储与查询

    MongoDB 中使用 GeoJSON对象 或 坐标对 描述空间地理数据。MongoDB使用 WGS84 参考系进行地理空间数据查询。 1、MongoDB支持空间数据的存储,数据类型需要限制为GeoJSON; 2、MongoDB可以为GeoJSON类型数据建立索引,提升空间查询的效率; GeoJSON 对象格式 GeoJSON 对象有两个filed,分别是 ty

    2024年02月11日
    浏览(22)
  • 改进YOLOv5:结合位置编码CoordConv,提升行人目标等预测能力 | 卷积加上坐标,从而使其具备了空间感知能力

    众所周知,深度学习里的卷积运算是具有平移等变性的,这样可以在图像的不同位置共享统一的卷积核参数,但是这样卷积学习过程中是不能感知当前特征在图像中的坐标的,论文中的实验证明如下图所示。通过该实验,作者证明了传统卷积在卷积核进行局部运算时,仅仅能感

    2024年02月02日
    浏览(71)
  • 空间坐标变换(Python&C++实现)

    空间坐标变换可看作坐标点乘以一个齐次矩阵,其中,齐次矩阵可表示为: 其中: ①区域的3×3矩阵产生三维图形的比例、对称、旋转、错切等基本变换; ②区域产生图形的透视变换; ③区域产生沿X、Y、Z三个轴的平移变换; ④区域产生图形的总比例变换。 平移变换可表示

    2024年02月13日
    浏览(23)
  • 【mars3d】Vue3项目集成mard3d实现gis空间地理系统

    最近公司的业务逻辑需要使用到gis空间地理系统,最开始使用的是Cesium.js.涉及东西很多,对新手不是太友好,传送门: https://cesium.com/platform/cesiumjs/ . 业务要使用到很多特效,刚接触到Cesium,很多效果实现起来很鸡肋,mars3d则很适合新手.文档与示例也很全,现在记录一下vue3项目如何集

    2024年02月13日
    浏览(35)
  • 【Python&RS】遥感影像的像素坐标转地理坐标(仿射变换)

    ​         GDAL(Geospatial Data Abstraction Library)是一个在X/MIT许可协议下的开源栅格空间数据转换库。它利用抽象数据模型来表达所支持的各种文件格式。它还有一系列命令行工具来进行数据转换和处理。         Python的GDAL库作为栅格数据的处理转换库,其支持几百种栅格数

    2024年02月08日
    浏览(33)
  • 一文讲清楚地图地理坐标系

    我最近在做一个和地图有关的项目,这里本人地图采用的是mapbox,其中涉及一个功能需要根据用户输入的地点直接定位到地图上的对应的位置,本人开始想的是直接调用百度的接口根据地名直接获取坐标,发现在地图上的位置有偏移不够准确,后面发现地图服务之间有自己的

    2024年02月15日
    浏览(31)
  • GIS数据漫谈(五)— 地理坐标系统

    地理坐标系统(GCS) 地理坐标系 通过角度测量单位(Unit)、本初子午线(PRIMEM)和基准面(DATUM)来进行定义。地理坐标系下的坐标值为 经纬度 ,所以有时也叫 经纬度坐标系 。 CGCS2000 ,2000国家大地坐标系。我们很多时候直接用WGS84的坐标来代替CGCS2000坐标。因为CGCS2000的

    2023年04月27日
    浏览(33)
  • 【数理知识】求两个三维空间点的坐标矩阵之间,任意两两点之间的空间距离,matlab 实现

    假设有两个包含了三维空间点坐标的,三维向量集 A A A 和 B B B ,两集合中分别有 m m m 个和 n n n 个三维空间坐标点,可以用矩阵表示为 A = [ a 1 x a 2 x a 3 x ⋯ a m x a 1 y a 2 y a 3 y ⋯ a m y a 1 z a 2 z a 3 z ⋯ a m z ] 3 × m , B = [ b 1 x b 2 x b 3 x ⋯ b n x b 1 y b 2 y b 3 y ⋯ b n y b 1 z b 2 z b 3 z ⋯

    2024年02月11日
    浏览(35)
  • 百度地图采集经纬度坐标数据定位的javascript实战开发(地理坐标拾取系统、地址定位点选插件、实时定位、数据导入、地理编码、位置纠偏)

    在百度地图的标注开发中,最为关键的操作就是经纬度坐标信息的拾取。在不同的应用场景,坐标的拾取方式不同。现就常见的地理坐标拾取系统、地址定位点选插件、手机端GPS实时定位、数据导入、地理编码、位置纠偏等做全面的介绍。 传送门:http://api.map.baidu.com/lbsapi/

    2024年02月01日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包