mongodb lbs java_MongoDB开发LBS应用

昨天晚上看到《APP后台运维与实践》中介绍MongoDB,其中有一个应用案例,讲的就是LBS应用,看到对于附近的人,及距离计算都非常方便

封装了大量的地理位置操作,全球流行的LBS服务Foursquare,快的曾经都是用MongoDB的地理位置查询功能

MongoDB原生支持地理位置索引,可以直接用于位置距离计算和查询。

db.runCommand( { geoNear: "places", near: [117.034449,36.673595], num:1000 })

查询结果默认将会由近到远排序,而且查询结果也包含目标点对象、距离目标点的距离等信息

MongoDB地理位置索引

(1)2d 平面坐标索引,适用于基于平面的坐标计算

(2)2dsphere 几何球体索引,适用于球面几何运算

建立索引:

> db.location.ensureIndex({'coordinate':'2d'})> db.location.ensureIndex({'coordinate':'2dsphere'})

查询坐标参数

(1)坐标对(经纬度)根据查询命令的不同,$maxDistance距离单位可能是 弧度 和 平面单位(经纬度的“度”)

db..find( { :

{ $nearSphere: [ , ] ,

$maxDistance:} } )

(2)GeoJson $maxDistance距离单位默认为米:

db..find( { :

{ $nearSphere :

{ $geometry :

{type :"Point",

coordinates : [ , ]} ,

$maxDistance :} } } )

eg:1.附近的人

A.和坐标[117.034449,36.673595]的间距在1000米内的坐标

db.location.find({"coordinate":{

"$nearSphere:[117.034449,36.673595],

"spherical":true,

"$maxDistance":1000/6378137,

"distanceMuitiplier":637813

}})

说明:

使用$nearSphere,查找有哪些坐标和用户当前坐标直线距离为某个固定值以内

spherical为true表示计算距离

distanceMuitiplier指定地球半径来得到实际的千米或米的距离,1000/6378137把距离转化为弧度

B.查找500米内的

db.location.find({"coordinate":{

"$nearSphere:[117.034449,36.673595],

"spherical":true,

"$maxDistance":500/6378137,

"distanceMuitiplier":637813

}})

C.查找500米内的坐标,同时显示和目标坐标的距离

db.runCommand({

"geoNear":location",

"near":[117.034449,36.673595],

"spherical":true,

"$maxDistance":500/6378137,

"distanceMuitiplier":637813

})

说明:

geoNear是基于db的command,返回结果包含距离信息

2.查找某个范围内的坐标

db.location.find({

"coordinate":{

"$geoWithin":{

$box:[[117.034233,36.667574],[117.056223,36.679211]]

}

}

})

51fba6cc435400465f8ebab656f61040.png

说明:

$geoWith操作符搜索某个范围内的坐标,支持$box矩形,$center圆,$polygon多边形

还可以使用 PostgreSQL+PostGIS

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值