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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • EnterpriseLibrary 介绍[通俗易懂]

    EnterpriseLibrary 介绍[通俗易懂]创建数据库对象的方法http://tutuya.cnblogs.com/articles/441337.html

    2022年10月20日
    1
  • Python 进阶 — Flake8 静态代码检查工具

    Python 进阶 — Flake8 静态代码检查工具目录文章目录目录Flake8错误返回码安装使用插件Flake8Flake8是由Python官方发布的一款静态代码检查工具(https://pypi.python.org/pypi/flake8/),相对于PyLint而言,Flake8的检查规则灵活,支持集成额外插件,扩展性强。Flake8是对下面3个工具的封装:PyFlakes:静态检查Python代码逻辑错误的工具。PEP8:静态检查PEP8编码风格的工具。NedBatchelder’sMcCabe:静态分析P

    2025年9月7日
    4
  • 大数据应用及其解决方案

    大数据应用及其解决方案1大数据概述 1.1.概述 大数据,IT行业的又一次技术变革,大数据的浪潮汹涌而至,对国家治理、企业决策和个人生活都在产生深远的影响,并将成为云计算、物联网之后信息技术产业领域又一重大创新变革。未来的十年将是一个“大数据”引领的智慧科技的时代、随着社交网络的逐渐成熟,移动带宽迅速提升、云计算、物联网应用更加丰富、更多的传感设备、移动终端接入到网络,由此而产生的数据及增长速度将…

    2022年6月2日
    39
  • pycharm创建python虚拟环境好处_pycharm虚拟环境与本地环境区别

    pycharm创建python虚拟环境好处_pycharm虚拟环境与本地环境区别提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、虚拟环境的作用二、虚拟环境的创建、查看以及删除1.虚拟环境的创建2.虚拟环境的查看3.虚拟环境的激活4.虚拟环境的删除总结前言网上的大多数教程都是通过使用第三方模块来创建和删除虚拟环境,对新手很不友好,在这里分享一下我使用Pycharm创建虚拟环境的过程。一、虚拟环境的作用每个虚拟环境中安装的第三方模块不会与其它环境中同名的第三方模块发生版本冲突,每个虚拟环境之间互不影响。通过为每个项目创建单独的虚拟环境

    2025年7月23日
    2
  • Java并发——线程同步Volatile与Synchronized详解

    Java并发——线程同步Volatile与Synchronized详解Java面试——线程同步volatile与synchronized详解0.前言面试时很可能遇到这样一个问题:使用volatile修饰int型变量i,多个线程同时进行i++操作,这样可以实现线程安全吗?提到线程安全、线程同步,我们经常会想到两个关键字:volatile和synchronized,那么这两者有什么区别呢?1.volatile与synchronized介绍volatile是变量修

    2022年7月11日
    18
  • Vim详细配置_mini5配置

    Vim详细配置_mini5配置Vim配置要点一、在终端中开打.vimrc文档二、在.vimrc文档中添加配置内容1.常用设置2.自动备份3.自动补全三、保存退出四、代码高亮不显示一、在终端中开打.vimrc文档vi~/.vimrc二、在.vimrc文档中添加配置内容1.常用设置setnumber “显示行号syntaxon “语法高亮度显示setautoindent “vim使用自动对起,也就是把当前行的对起格式应用到下一行setsmartindent “依据上面的对起格式,智能的

    2022年9月29日
    5

发表回复

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

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