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)
上一篇 2021年11月30日 下午3:00
下一篇 2021年11月30日 下午3:00


相关推荐

  • atof函数 C++用法

    atof函数 C++用法atof 函数原型 doubleatof constchar string ASCIItofloat 作用 将字符串转为 double 类型 nbsp 对于以上函数 若字符串无法转化为合法的数值类型 函数将返回 0 使用范例 来自 MSDN 1 include nbsp stdlib h2 include nbsp stdio h34voi

    2026年3月18日
    2
  • 随机森林算法原理简要总结怎么写_旋转森林算法

    随机森林算法原理简要总结怎么写_旋转森林算法①RandomForest随机森林算法原理:即bagging法+CART算法生成决策树的结合。RF=bagging+fully-grownCARTdecisiontree②bagging法的核心:bootstrap在原始数据集D中选择若干个子数据集Dt,将子数据集单个单个进行决策树生成。③随机森林的优点:可并行化计算(子集的训练相互独立),效率高继承了CART算法的优点(使用Gini系数选择最优特征及切分点)减小了完全生成树的弊端(因为完全生成树过于复杂,Ein小但E

    2025年7月14日
    6
  • RxJava原理浅析

    RxJava原理浅析本文内容基于 RxJava2 1 6 版本 RxAndroid2 0 1 版本 主要是探索一下 RxJava 的内部结构以及其工作流程

    2026年3月17日
    2
  • MATLAB 安装包「建议收藏」

    MATLAB 安装包「建议收藏」呃,想说的话看栏目简介。我只有三种MATLAB,MATLAB2014a,2018b,2019a,是上学时学风电和现控时用的,这玩意还是越新版本的越好,个人对MATLAB是又爱又恨,,,链接:https://pan.baidu.com/s/1CTDfWmuefLcKW8hW5-569w提取码:xtmd…

    2022年6月8日
    35
  • KVM虚拟机扩容

    KVM虚拟机扩容此篇记录 KVM 虚拟机内存不足 用于扩容查看运行的虚拟机 virshlistall 名称状态 1kx gitlabrunnin mysql new

    2026年3月17日
    2
  • oidc_使用Java EE和OIDC构建Java REST API

    oidc_使用Java EE和OIDC构建Java REST APIoidc 我喜欢编写身份验证和授权代码 从来没有 Java 开发人员 厌倦了一次又一次地建立相同的登录屏幕 尝试使用 OktaAPI 进行托管身份验证 授权和多因素身份验证 JavaEE 允许您使用 JAX RS 和 JPA 快速轻松地构建 JavaRESTAPI JavaEE 是保护伞标准规范 它描述了许多 Java 技术 包括 EJB JPA JAX RS 和许多其他技术 它最初旨在允许 J

    2026年3月26日
    2

发表回复

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

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