您的位置:首页 > 数据库 > Mongodb

Mongodb地理空间索引

2015-09-10 17:00 525 查看

1. LBS地理空间索引

关于LBS相关项目,一般存储每个地点的经纬度的坐标, 如果要查询附近的场所,则需要建立索引来提升查询效率。
Mongodb专门针对这种查询建立了地理空间索引。
2d和2dsphere索引。

2. 创建索引

建立places集合,来存放地点,
loc字段用来存放地区数据GeoJSON Point。

[plain] view
plaincopy





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"

}

)

建立索引

[plain] view
plaincopy





db.places.ensureIndex( { loc : "2dsphere" } )

参数不是1或-1,为2dsphere。
还可以建立组合索引。

[plain] view
plaincopy





db.places.ensureIndex( { loc : "2dsphere" , category : -1, name: 1 } )

3. 查询

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

3.1 查询多边形范围的值

type表示类型:polygon 多边形

[plain] view
plaincopy





db.places.find( { loc :

{ $geoWithin :

{ $geometry :

{ type : "Polygon" ,

coordinates : [ [

[ 0 , 0 ] ,

[ 3 , 6 ] ,

[ 6 , 1 ] ,

[ 0 , 0 ]

] ]

} } } } )

3.2 查询附近的值

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

[plain] view
plaincopy





db.places.find( { loc :

{ $near :

{ $geometry :

{ type : "Point" ,

coordinates : [ <longitude> , <latitude> ] } ,

$maxDistance : <distance in meters>

} } } )

3.3 查询圆形内的值

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

[plain] view
plaincopy





db.places.find( { loc :

{ $geoWithin :

{ $centerSphere :

[ [ -88 , 30 ] , 10 ]

} } } )

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

地址:/article/1565125.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: