相关文章推荐
仗义的登山鞋  ·  APP中如何实现基于地理位置(LBS)的门店 ...·  2 年前    · 
仗义的登山鞋  ·  [LBS学习笔记3]redis ...·  2 年前    · 
仗义的登山鞋  ·  基于Redis Geo ...·  2 年前    · 
仗义的登山鞋  ·  LBS数据仓库| ...·  2 年前    · 
仗义的登山鞋  ·  mongodb11天之屠龙宝刀(五)lbs地 ...·  2 年前    · 
小百科  ›  mongodb11天之屠龙宝刀(五)lbs地理位置检索:存储经纬度以及查询
LBS 位置 索引 mongodb lbs 经纬度
仗义的登山鞋
2 年前
作者头像
学到老
0 篇文章

mongodb11天之屠龙宝刀(五)lbs地理位置检索:存储经纬度以及查询

前往专栏
腾讯云
开发者社区
文档 意见反馈 控制台
首页
学习
活动
专区
工具
TVP
文章/答案/技术大牛
发布
首页
学习
活动
专区
工具
TVP
返回腾讯云官网
社区首页 > 专栏 > 深度学习之tensorflow实战篇 > mongodb11天之屠龙宝刀(五)lbs地理位置检索:存储经纬度以及查询

mongodb11天之屠龙宝刀(五)lbs地理位置检索:存储经纬度以及查询

作者头像
学到老
发布 于 2018-03-19 17:25:26
1.6K 0
发布 于 2018-03-19 17:25:26
举报

mongodb11天之屠龙宝刀(五)lbs地理位置检索:存储经纬度以及查询

基本原理

LBS,存储每个地点的经纬度坐标,搜寻附近的地点,建立地理位置索引可提高查询效率。 mongodb 地理位置索引,2d和2dsphere,对应平面和球面。 mongodb位置 查询文档 实现原理: 参考文章

两种索引方式

地理位置索引,必须创建索引才可以能查询,目前有两种索引。

2d index:

使用2d index 能够将数据作为2维平面上的点存储起来,在MongoDB 2.2以前推荐使用2d index索引。

2dsphere index:

2dsphere index 支持球体的查询和计算,同时它支持 数据存储 为GeoJSON 和传统坐标。

3种距离单位

米(meters) 平面单位(flat units,可以理解为经纬度的“一度”) 弧度(radians)

2d索引能同时支持center和center和center和centerSphere, 2dsphere索引支持centerSphere。centerSphere。centerSphere。 center默认是度,$centerSphere默认距离是弧度

地理位置索引创建与查询

地理位置索引-2d索引
这里写图片描述

首先需对col里的w设置索引为’2d’,方可进行$near查询

db.location.ensureIndex({w:"2d"})  

w对应的经纬度外镶字段 创建了地理位置索引,默认mongoDB**不允许查询超过180的值**

2d索引查询方式
这里写图片描述
$near 附近的点
db.location.find({w:{$near:[1,1]}})

$near会返回最近的100个记录. 地理位置索引-2d索引-$near 限制返回的距离的远近,限制最远距离:限制最近距离: maxDistance单位是弧度, 地球表面1弧度距离约为6378137米, 0.001弧度距离为6378米

这里写图片描述
$geoWithin 某个形状内的点

地理位置索引-2d索引 $geoWithin 形状的表示 由于 $geoWithin 是查询某个形状内的点,所以先要学会如何表示形状. 地理位置索引-2d索引 $geoWithin 查询矩形中的点

db.location.find({w:{$geoWithin:{$box:[[0,0],[3,3]]}}})
db.location.find({w:{$geoWithin:{$box:[[1,1],[2,3]]}}})

地理位置索引-2d索引 $geoWithin 查询圆形中的点

db.location.find({w:{$geoWithin:{$center:[[0,0],5]}}})

地理位置索引-2d索引 $geoWithin 查询多边形中的点

db.location.find({w:{$geoWithin:{$polygon:[[0,0],[0,1],[2,5],[6,1]]}}})
geoNear

地理位置索引-2d索引 geoNear geoNear查询使用runCommand命令进行使用,db.runCommand({geoNear:,near:[,],minDistance:(对2D索引无效,2Dsphere有效),maxDistance:(最大距离),num:(返回结果个数)})

db.runCommand({geoNear:"location",near:[1,2],maxDistance:10,num:1})
这里写图片描述
地理位置索引-2dsphere索引
这里写图片描述

查询案例:

db.user.find({"geo": {$near: [118.10388605,24.48923061], $maxDistance:0.1}},{id:1, name:1, state:1, geo:1}).limit(1).pretty()
这里写图片描述
2dsphere操作案例
插入 lbs;
db.lbs.insert(  
        loc:{  
            type: "Point",  
            coordinates: [113.332264, 23.156206]  
        name: "广州东站"  
db.lbs.insert(  
        loc:{  
            type: "Point",  
            coordinates: [113.330611, 23.147234]  
        name: "林和西"  
db.lbs.insert(  
        loc:{  
            type: "Point",  
            coordinates: [113.328095, 23.165376]  
        name: "天平架"  
)  

插入结果,IDE显示如下

这里写图片描述
地理位置索引
db.lbs.ensureIndex(  
        loc: "2dsphere"  
 创建完成之后在indexes中出现了新的索引形式即为成功 
 #注意此调用情况下,maxdistance  单位是米

db.lbs.find(  
        loc: {  
            $near:{  
                $geometry:{  
                    type: "Point",  
                    coordinates: [113.323568, 23.146436]  
                $maxDistance: 1000  
)  

最终查询结果下:

这里写图片描述
查询更多字段

查询更多字段时,执行:


 db.lbs.find( 
         loc: { 
 near:{near:{near:{                   geometry:{ 
                     type: “Point”, 
                     coordinates: [113.323568, 23.146436] 
 
推荐文章
仗义的登山鞋  ·  APP中如何实现基于地理位置(LBS)的门店展示和查询- 知乎
2 年前
仗义的登山鞋  ·  [LBS学习笔记3]redis geo地理位置查询分析- 掘金
2 年前
仗义的登山鞋  ·  基于Redis Geo 实现地理位置服务(LBS)中查找附近XXX 的功能 ...
2 年前
仗义的登山鞋  ·  LBS数据仓库| 基站|WIFI|LBS定位|经纬度|查询|API接口_留下的弥足 ...
2 年前
仗义的登山鞋  ·  mongodb11天之屠龙宝刀(五)lbs地理位置检索:存储经纬度以及查询
2 年前
Link管理   ·   Sov5搜索   ·   小百科
小百科 - 百科知识指南