Mongodb地理空间索引

Mongodb地理空间索引

大家好,又见面了,我是全栈君,祝每个程序员都可以多学几门语言。

1. LBS地理空间索引


关于LBS相关项目,一般存储每一个地点的经纬度的坐标, 假设要查询附近的场所,则须要建立索引来提升查询效率。
Mongodb专门针对这样的查询建立了地理空间索引。
2d和2dsphere索引。

2. 创建索引


建立places集合,来存放地点,
loc字段用来存放地区数据GeoJSON Point。
db.places.insert(
   {
      loc : { type: "Point", coordinates: [ -73.97, 40.77 ] },
      name: "Central Park",
      category : "Parks"
   }
)

db.places.insert(
   {
      loc : { type: "Point", coordinates: [ -73.88, 40.78 ] },
      name: "La Guardia Airport",
      category : "Airport"
   }
)

建立索引

db.places.ensureIndex( { loc : "2dsphere" } )

參数不是1或-1,为2dsphere。

还能够建立组合索引。
db.places.ensureIndex( { loc : "2dsphere" , category : -1, name: 1 } )

3. 查询


$geometry表示查询的几何图片.

3.1 查询多边形范围的值


type表示类型:polygon 多边形

db.places.find( { loc :
                  { $geoWithin :
                    { $geometry :
                      { type : "Polygon" ,
                        coordinates : [ [
                                          [ 0 , 0 ] ,
                                          [ 3 , 6 ] ,
                                          [ 6 , 1 ] ,
                                          [ 0 , 0 ]
                                        ] ]
                } } } } )

3.2 查询附近的值


使用$near来查询附近的地点。
 db.places.find( { loc :
                         { $near :
                           { $geometry :
                              { type : "Point" ,
                                coordinates : [ <longitude> , <latitude> ] } ,
                             $maxDistance : <distance in meters>
                      } } } )

3.3 查询圆形内的值


查询圆时,须要指定圆心, 半径。
db.places.find( { loc :
                  { $geoWithin :
                    { $centerSphere :
                       [ [ -88 , 30 ] , 10 ]
                } } } )

[-88, 30] 为经纬度,  10为半径。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/118844.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • PyTorch踩坑指南(1)nn.BatchNorm2d()函数

    PyTorch踩坑指南(1)nn.BatchNorm2d()函数前言最近在研究深度学习中图像数据处理的细节,基于的平台是PyTorch。心血来潮,总结一下,好记性不如烂笔头。BatchNormalization对于2015年出现的BatchNormalization1,2018年的文章GroupNormalization2在Abstract中总结得言简意赅,我直接copy过来。BatchNormalization(BN)isamile…

    2022年6月7日
    54
  • pg数据库杀进程_centos杀死进程命令

    pg数据库杀进程_centos杀死进程命令SELECTpg_stat_get_backend_pid(s.backendid)ASprocpid,      pg_stat_get_backend_activity(s.backendid)AScurrent_query   FROM(SELECTpg_stat_get_backend_idset()ASbackendid)ASs;  杀掉某个

    2025年9月14日
    14
  • apache2服务器_apache2配置

    apache2服务器_apache2配置摘要:在本地做WEB开发,同时多个项目,希望将每个项目都使用一个域名指向各自的项目根目录。要实现这样的目的,虚拟主机是必须要掌握的。本篇从一个小白用户的视角开始从零开始深入了解并实例配置演示。

    2022年9月18日
    3
  • 英语词根词缀总结整合版

    请大家想一想,英语是谁发明的?英国人呗!英国人认不认识汉语?不认识!那么英国人在学英语单词的时候需不需要记住单词的汉语意思?不需要,英国人的英语课本里根本就没有汉字,何谈记住单词的汉语意思?那么既然英国人学英语不需要记住(甚至根本就见不到)单词的汉语意思,那么中国人学英语为什么要去记住单词的汉语意思呢?这种做法大家不觉得奇怪吗?然而由于中国人学英语时都在背单词的汉语意思,因此大家反而觉不出“背…

    2022年4月6日
    22
  • Python数据类型有哪些,哪些是可变类型,哪些是不可变类型?

    Python数据类型有哪些,哪些是可变类型,哪些是不可变类型?Python数据类型有哪些,哪些是可变类型,哪些是不可变类型?类型:整数int字符串str浮点数float布尔型bool列表list字典dict集合set元组tuple可变类型:就是这个数据类型的值在不改变这一块内存空间,而去改变这个数据类型的值。1.列表2.字典3.集合不可变类型:当改变值得时候,会申请一块新的内存空间,不再是原来的那一块内存空间了。整数字符串浮点数布尔型元组…

    2022年6月10日
    34
  • MaxCompute Studio使用心得系列3——可视化分析作业运行

    MaxCompute Studio使用心得系列3——可视化分析作业运行

    2022年3月8日
    62

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号