Mongodb地理空間索引


1. LBS地理空間索引

關於LBS相關項目,一般存儲每個地點的經緯度的坐標, 如果要查詢附近的場所,則需要建立索引來提升查詢效率。 Mongodb專門針對這種查詢建立了地理空間索引。 2d和2dsphere索引。

2. 創建索引

建立places集合,來存放地點, loc字段用來存放地區數據GeoJSON Point。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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"
    }
)

建立索引

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

參數不是1或-1,為2dsphere。還可以建立組合索引。

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

3. 查詢

$geometry表示查詢的幾何圖片.

3.1 查詢多邊形范圍的值

type表示類型:polygon 多邊形

?
1
2
3
4
5
6
7
8
9
10
11
db.places.find( { loc :
                   { $geoWithin :
                     { $geometry :
                       { type : "Polygon" ,
                         coordinates : [ [
                                           [ 0 , 0 ] ,
                                           [ 3 , 6 ] ,
                                           [ 6 , 1 ] ,
                                           [ 0 , 0 ]
                                         ] ]
                 } } } } )

3.2 查詢附近的值

使用$near來查詢附近的地點。

?
1
2
3
4
5
6
7
db.places.find( { loc :
                         { $near :
                           { $geometry :
                              { type : "Point" ,
                                coordinates : [ <longitude> , <latitude> ] } ,
                             $maxDistance : <distance in meters>
                      } } } )

3.3 查詢圓形內的值

查詢圓時,需要指定圓心, 半徑。

?
1
2
3
4
5
db.places.find( { loc :
                   { $geoWithin :
                     { $centerSphere :
                        [ [ -88 , 30 ] , 10 ]
                 } } } )

[-88, 30] 為經緯度, 10為半徑。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM