前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Mongodb地理空间索引

Mongodb地理空间索引

作者头像
全栈程序员站长
发布2022-07-12 15:38:52
发布2022-07-12 15:38:52
56000
代码可运行
举报
运行总次数:0
代码可运行

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

1. LBS地理空间索引

关于LBS相关项目,一般存储每一个地点的经纬度的坐标, 假设要查询附近的场所,则须要建立索引来提升查询效率。

Mongodb专门针对这样的查询建立了地理空间索引。

2d和2dsphere索引。

2. 创建索引

建立places集合,来存放地点,

loc字段用来存放地区数据GeoJSON Point。

代码语言:javascript
代码运行次数:0
运行
复制
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"
   }
)

建立索引

代码语言:javascript
代码运行次数:0
运行
复制
db.places.ensureIndex( { loc : "2dsphere" } )

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

还能够建立组合索引。

代码语言:javascript
代码运行次数:0
运行
复制
db.places.ensureIndex( { loc : "2dsphere" , category : -1, name: 1 } )

3. 查询

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

3.1 查询多边形范围的值

type表示类型:polygon 多边形

代码语言:javascript
代码运行次数:0
运行
复制
db.places.find( { loc :
                  { $geoWithin :
                    { $geometry :
                      { type : "Polygon" ,
                        coordinates : [ [
                                          [ 0 , 0 ] ,
                                          [ 3 , 6 ] ,
                                          [ 6 , 1 ] ,
                                          [ 0 , 0 ]
                                        ] ]
                } } } } )

3.2 查询附近的值

使用$near来查询附近的地点。

代码语言:javascript
代码运行次数:0
运行
复制
 db.places.find( { loc :
                         { $near :
                           { $geometry :
                              { type : "Point" ,
                                coordinates : [ <longitude> , <latitude> ] } ,
                             $maxDistance : <distance in meters>
                      } } } )

3.3 查询圆形内的值

查询圆时,须要指定圆心, 半径。

代码语言:javascript
代码运行次数:0
运行
复制
db.places.find( { loc :
                  { $geoWithin :
                    { $centerSphere :
                       [ [ -88 , 30 ] , 10 ]
                } } } )

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

地址: http://blog.csdn.net/yonggang7/article/details/28109463

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021年11月,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. LBS地理空间索引
  • 2. 创建索引
  • 3. 查询
    • 3.1 查询多边形范围的值
    • 3.2 查询附近的值
    • 3.3 查询圆形内的值
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档