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


相关推荐

  • 架设邮件服务器-windows 2003 POP3服务,SMTP服务收发邮件「建议收藏」

    1.默认安装的系统是没有安装POP3组件,SMTP组件,搞个盘过来,或从网上下载一个i386(下载地址:http://down.spdns.com/i386.rar ).(1)从“控制面板→添加/删除程序→添加windows组件”中,进入“Windwos组件”界面,激活“应用程序服务器”一行,然后单击“详细信息”按钮,进入“应用程序服务器”页,选择“Internet信息服务(IIS)”复选

    2022年4月6日
  • word2vec原理与Gensim使用[通俗易懂]

    word2vec原理与Gensim使用[通俗易懂]word2vec原理1NeuralNetworkLanguageModel2CBOW2.1HierarchicalSoftmax2.2NegativeSampling3Skip-gram3.1HierarchicalSoftmax3.2NegativeSampling4负采样算法5.word2vec实战1NeuralNetworkLanguageModel…

    2022年5月16日
  • idea激活码永久2021(注册激活)「建议收藏」

    (idea激活码永久2021)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~S32PGH0SQB-eyJsaWNlb…

    2022年3月26日
  • Linux信号,signal和sigaction(一)[通俗易懂]

    Linux信号,signal和sigaction(一)[通俗易懂]
    信号是Unix和Linux系统响应某些条件而产生的一个事件。接收到该信号的进程会相应地采取一些操作。
    每个信号都有一个数字编码。
     
             实例:Ctrl-C的工作原理
            1.用户输入ctrl-c<

    2022年5月4日
  • java 流水线模式_流水线设计模式实现

    java 流水线模式_流水线设计模式实现这是关于管道实现的设计问题。以下是我的天真实施。流水线设计模式实现接口在管道的各个步骤/阶段:在流水线的步骤/阶段的publicinterfaceStep{publicUexecute(Tinput);}具体实现:publicclassStepOneimplementsStep{@OverridepublicIntegerexecute(Integerinput){r…

    2022年8月14日
  • git提交代码流程

    git提交代码流程使用git也快有两年了,今天将常用命令总结一下,我描述一个整个的开发流程架构师在gitlab上新建了一个项目,搭好了框架1.我作为开发者之一,首先gitclonehttps://xx用idea打开项目,然后点开idea下面的console,在这里面执行git命令刚进来自然是master分支,然后我们首先创建一个自己的分支并切换过去,命令如下gitcheckout-…

    2022年6月29日

发表回复

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

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