美文网首页
利用MongoDB进行地理坐标查询

利用MongoDB进行地理坐标查询

作者: whthomas | 来源:发表于2016-12-28 22:05 被阅读598次

LBS的应用在生活中已经非常常见,我们打车,叫外卖,查个地图之类的都会查询附近的相关坐标位置,mongodb提供了原生的二维地图查询,极大地方便了大家的开发。

假定我们有一个定义了位置信息的集合location,给定a,b,c,d节点.

> db.location.find()
{ "_id" : "A", "position" : [ 0, 10 ] }
{ "_id" : "B", "position" : [ 10, 0 ] }
{ "_id" : "C", "position" : [ 20, 0 ] }
{ "_id" : "D", "position" : [ 0, 15 ] }

这四个点的位置如图所示:

初始化的坐标点

locationposition字段指定2d索引。

> db.location.ensureIndex( {position: "2d"} )
{
    "createdCollectionAutomatically" : false,
    "numIndexesBefore" : 1,
    "numIndexesAfter" : 2,
    "ok" : 1
}

我们假定找出坐标点(0,0)附近半径为10的所有坐标点:

> db.location.find( {position: { $near: [0,0], $maxDistance: 10  } } )
{ "_id" : "A", "position" : [ 0, 10 ] }
{ "_id" : "B", "position" : [ 10, 0 ] }

其中$near表示中心坐标点,而$maxDistance表示最远的路径10.

查询中心点半径为10的坐标

再增加一个坐标点E(5,0),然后再次查询

> db.location.insert({_id:"E",position:[5,0]})
> db.location.find( {position: { $near: [0,0], $maxDistance: 10  } } )
{ "_id" : "E", "position" : [ 5, 0 ] }
{ "_id" : "A", "position" : [ 0, 10 ] }
{ "_id" : "B", "position" : [ 10, 0 ] }

由查询可见,mongodb会将数据按照离中心点的距离进行排序,约近的坐标点顺序越靠前。

除此之外,使用$center函数也可以完成同样的动作。

> db.location.find({"position":{$geoWithin:{"$center":[[0,0],10]}}})
{ "_id" : "E", "position" : [ 5, 0 ] }
{ "_id" : "A", "position" : [ 0, 10 ] }
{ "_id" : "B", "position" : [ 10, 0 ] }
增加坐标点E之后

mongodb还支持选定空间(box)的查询,查询在某一个矩形范围内的坐标点:

> db.location.find({"position":{$geoWithin:{"$box":[[0,0],[15,15]]}}})
{ "_id" : "E", "position" : [ 5, 0 ] }
{ "_id" : "A", "position" : [ 0, 10 ] }
{ "_id" : "B", "position" : [ 10, 0 ] }
{ "_id" : "D", "position" : [ 0, 15 ] }
选定区域查询

mongo在地理查询上还支持多边形($polygon)等操作,丰富的操作极大提升了地理信息系统的开发。结合redis3.2版本可以制作出很丰富的地理信息应用了。

相关文章

  • 利用MongoDB进行地理坐标查询

    LBS的应用在生活中已经非常常见,我们打车,叫外卖,查个地图之类的都会查询附近的相关坐标位置,mongodb提供了...

  • MongoDB-第四章-查询

    查询 对MongoDB进行新增、修改和删除后,最主要的功能就是对数据(集合)进行查询,MongoDB支持丰富的查询...

  • MongoDB空间索引

    MongoDB提供强大的空间索引,可查询出一定范围的地理坐标。 查询出距离点[70,180]最近的3个点 查看以[...

  • MongoDB索引与优化详解

    在MongoDB中通过建立索引可以进行高效的查询,如果没有索引MongoDB将会扫描整个集合与查询的条件进行匹配,...

  • 利用Python进行地理坐标系统的转换

    本文主要讲述地理坐标系统的原理以及怎么利用Python进行地理坐标系统转换,主要内容包含以下几块: 什么是地理坐标...

  • MongoDB 常用查询操作

    MongoDB 查询操作可实现大部分关系型数据库的常用查询操作,本文对 MongoDB 常用查询进行讲解。 在阅读...

  • MongDB翻译:mongos

    原文 mongos 查询与写入操作利用MongoDB的mongos实例在集群中进行路由。从应用程序的角度来看,mo...

  • MongoDB第四讲 深入MongoDB的查询操作

    基础查询 MongoDB的查询操作非常重要,使用find和findOne进行查询,通过{}来设定查询条件,如果什么...

  • Spring boot MongoDB 复杂查询

    1.Mongodb查询多个对象 2.Mongodb查询单个对象 3.Mongodb分页查询 4.Mongodb统计...

  • Mongo连表聚合查询(1)

    在使用MongoDB存储数据的时候,我们查询的时候,有时候难免会需要进行连表查询。但是MongoDB本身是非关系性...

网友评论

      本文标题:利用MongoDB进行地理坐标查询

      本文链接:https://www.haomeiwen.com/subject/wzhuvttx.html