利用MongoDB进行地理坐标查询
BS的应用在生活中已经非常常见,我们打车,叫外卖,查个地图之类的都会查询附近的相关坐标位置,mongodb提供了原生的二维地图查询,极大地方便了大家的开发。
假定我们有一个定义了位置信息的集合location
,给定a
,b
,c
,d
节点
db.location.find()
{ "_id" : "A", "position" : [ , ] }
{ "_id" : "B", "position" : [ , ] }
{ "_id" : "C", "position" : [ , ] }
{ "_id" : "D", "position" : [ , ] }
这四个点的位置如图所示: 为location的position字段指定2d索引。
db.location.ensureIndex( {position: "2d"} )
{
"createdCollectionAutomatically" : false,
"numIndexesBefore" : ,
"numIndexesAfter" : ,
"ok" :
}
我们假定找出坐标点(0,0)附近半径为10的所有坐标点:
db.location.find( {position: { $near: [,], $maxDistance: } } )
{ "_id" : "A", "position" : [ , ] }
{ "_id" : "B", "position" : [ , ] }
其中$near表示中心坐标点,而$maxDistance表示最远的路径10.
再增加一个坐标点E(5,0),然后再次查询
db.location.insert({_id:"E",position:[,]});
db.location.find( {position: { $near: [,], $maxDistance: } } )
{ "_id" : "E", "position" : [ , ] }
{ "_id" : "A", "position" : [ , ] }
{ "_id" : "B", "position" : [ , ] };
由查询可见,mongodb会将数据按照离中心点的距离进行排序,约近的坐标点顺序越靠前。
除此之外,使用$center函数也可以完成同样的动作。
db.location.find({"position":{$geoWithin:{"$center":[[,],]}}})
{ "_id" : "E", "position" : [ , ] }
{ "_id" : "A", "position" : [ , ] }
{ "_id" : "B", "position" : [ , ] }
mongodb还支持选定空间(box)的查询,查询在某一个矩形范围内的坐标点:
db.location.find({"position":{$geoWithin:{"$box":[[,],[,]]}}})
{ "_id" : "E", "position" : [ , ] }
{ "_id" : "A", "position" : [ , ] }
{ "_id" : "B", "position" : [ , ] }
{ "_id" : "D", "position" : [ , ] }
mongo在地理查询上还支持多边形($polygon)等操作,丰富的操作极大提升了地理信息系统的开发。结合redis的3.2版本可以制作出很丰富的地理信息应用了。
利用MongoDB进行地理坐标查询的更多相关文章
- 如何利用MongoDB实现高性能,高可用的双活应用架构?
投资界有一句至理名言——“不要把鸡蛋放在同一个篮子里”.说的是投资需要分解风险,以免孤注一掷失败之后造成巨大的损失. 转发来自 如何利用MongoDB实现高性能,高可用的双活应用架构?http://d ...
- mongodb的高级查询
db的帮助文档 输入:db.help(); db.AddUser(username,password[, readOnly=false]) 添加用户 db.auth(usrename,passwor ...
- MongoDB 覆盖索引查询
MongoDB 覆盖索引查询 官方的MongoDB的文档中说明,覆盖查询是以下的查询: 所有的查询字段是索引的一部分 所有的查询返回字段在同一个索引中 由于所有出现在查询中的字段是索引的一部分, Mo ...
- MongoDB 入门之查询(find)
MongoDB 入门之查询(find) 1. find 简介 (1)find的第一个参数决定了要返回哪些文档. 空的查询文档会匹配集合的全部内容.默认就是{}.结果将批量返回集合c中的所有文档. db ...
- 利用Bootstrap框架制作查询页面的界面
UI设计实战篇——利用Bootstrap框架制作查询页面的界面 Bootstrap框架是一个前端UI设计的框架,它提供了统一的UI界面,简化了设计界面UI的过程(缺点是定制了界面,调整的余地不是太 ...
- MongoDB数据库中查询数据(下)
MongoDB数据库中查询数据(下) 在find中,options参数值为一个对象,用来设置查询数据时使用的选项,下面我们来对该参数值对象中可以使用的属性进行介绍: 1. fields; 该属性值为一 ...
- 在MongoDB数据库中查询数据(上)
在MongoDB数据库中查询数据(上) 在MongoDB数据库中,可以使用Collection对象的find方法从一个集合中查询多个数据文档,find方法使用方法如下所示: collection.fi ...
- 【转】MongoDB学习笔记(查询)
原文地址 MongoDB学习笔记(查询) 基本查询: 构造查询数据. > db.test.findOne() { "_id" : ObjectId("4fd58ec ...
- 【第十二章】 springboot + mongodb(复杂查询)
简单查询:使用自定义的XxxRepository接口即可.(见 第十一章 springboot + mongodb(简单查询)) 复杂查询:使用MongoTemplate以及一些查询条件构建类(Bas ...
随机推荐
- HTML <link> 标签 PC移动网站适配
1.在pc版网页上,添加指向对应移动版网址的特殊链接rel="alternate"标记,这有助于百度发现网站的移动版网页所在的位置: <link rel="cano ...
- SparkShuffle机制
在早期版本的Spark中,shuffle过程没有磁盘读写操作,是纯内存操作,后来发现效率较低,且极易引发OOME,较新版本的Shuffle操作都加入了磁盘读写进行了改进. 1.未经优化的HashShu ...
- nginx基础(一)
一.nginx的安装.启动.停止及文件解读 yum -y install gcc gcc-c++ autoconf pcre-devel make automake yum -y install wg ...
- Learning links
技术文档.API 和代码示例 _ Microsoft Docs _NET 文档 _ Microsoft Docs TutorialsTeacher_C# 菜鸟教程_C# 圣殿骑士<博客园精华集& ...
- java 企业站源码 兼容手机平板PC 自适应响应式 SSM主流框架 freemaker 静态引擎
前台: 支持四套模版, 可以在后台切换 系统介绍: 1.网站后台采用主流的 SSM 框架 jsp JSTL,网站后台采用freemaker静态化模版引擎生成html 2.因为是生成的html,所以 ...
- imx6ull+debian10 构建静态qt交叉编译环境
# PC:Ubuntu18.04# GCC: arm-linux-gnueabihf- 7.4.0# 开发板:# imx6ull+debian10(文件系统为野火提供的) # 此处需要编译的是带gst ...
- Page Object设计模式(一)
一.简介 主要特点体现在“对界面交互细节的封装”上,使测试用例更专注于业务的操作,从而提高测试用例的可维护性.解决UI变动问题. page对象的一个基本原则经验法则是:凡是人能做的事,page对象通过 ...
- 拓展lucas结论及模板
lucas及其拓展 模板题 洛谷 P4720 本文侧向结论和代码实现, 推导请转至lucas定理及其拓展的推导 https://blog.csdn.net/yuyilahanbao/article/d ...
- 根据词频生成词云(Python wordcloud实现)
网上大多数词云的代码都是基于原始文本生成,这里写一个根据词频生成词云的小例子,都是基于现成的函数. 另外有个在线制作词云的网站也很不错,推荐使用:WordArt 安装词云与画图包 pip3 insta ...
- 【终端使用】"scp"命令,远程拷贝文件
一."scp"命令的使用 "scp"命令,是"secure copy (remote file copy program)"英文单词的缩写, ...