MongoDB2.4支持空间数据 点线面

2dsphere索引--2.4版本的新特色

      2dsphere索引支持地球球面上的空间体计算的查询,支持以GeoJSON存储的对象和以传统坐标对存储的对象,但是传统坐标对存储的对象要转换成GeoJSON的格式才受支持。2dsphere索引支持所有MongoDB的地理空间查询:包容,交叉和领近。

     组合2dsphere索引可以把空间字段和非空间字段在一个collection文档中关联起来,不可以随意安排组合这些字段。

     MongoDB2.4中参考参考椭球体的基准是WGS84. 坐标轴的顺序是经度,纬度。

         注意:MongoDB2.4中每个集合只容许建立一个空间索引。

         注意:分片的时候你可以用2dsphere索引当做shard key。但是,您可以通过使用一个不同的字段的键,创建和维护地理空间索引分片收集碎片。

 

 GeoJSON对象的存储

mongoDB支持一下几类GeoJSON对象:

 要在GeoJSON对象上建立索引,你需要把数据存在你命名的location字段中。这个location字段包含一个GeoJSON对象类型域和一个坐标域。记住确保是经度在前,纬度在后。

使用一下语法:

{ <location field> : { type : "<GeoJSON type>" ,
                       coordinates : <coordinates>
} }

 

点:

{ loc : { type : "Point" ,
          coordinates : [ 40, 5 ]
} }

 

线: 

{ loc : { type : "LineString" ,
          coordinates : [ [ 40 , 5 ] , [ 41 , 6 ] ]
} }

 

面:

{ loc :
   { type : "Polygon" ,
     coordinates : [ [ [ 0 , 0 ] , [ 3 , 6 ] , [ 6 , 1 ] , [ 0 , 0 ] ] ]
} }

记住面至少有4个点,起始点和端点一致保证闭合。

 包含多个ring的面:

{ loc :
   { type : "Polygon" ,
     coordinates : [ [ [ 0 , 0 ] , [ 3 , 6 ] , [ 6 , 1 ] , [ 0 , 0 ] ],
                     [ [ 2 , 2 ] , [ 3 , 3 ] , [ 4 , 2 ] , [ 2 , 2 ] ] ]
} }

 

 这种类型确保最外面的ring在开始,不相交,其他的ring包含在最外面的ring中。

创建2dshpere索引

通过ensureIndex()方法为GeoJSON格式的数据建立空间索引,并指定集合中的定位域给2dshpere。2dshpere也可以是一个组合的索引( compound index),他不需要把定位域放在索引域中的第一个。

创建索引的语法:

db.points.ensureIndex( { <location field> : "2dsphere" } )
db.points.ensureIndex( { loc : "2dsphere" } )
db.points.ensureIndex( { loc : "2dsphere" , type : 1 } )
db.points.ensureIndex( { rating : 1 , loc : "2dsphere" } )
db.points.ensureIndex( { loc : "2dsphere" , rating : 1 , category : -1 } )

在2dsphere 索引上进行查询

db.<collection>.find( { <location field> :
                         { $geoWithin :
                           { $geometry :
                             { type : "Polygon" ,
                               coordinates : [ <coordinates> ]
                      } } } } )

实例:

db.places.find( { loc :
                  { $geoWithin :
                    { $geometry :
                      { type : "Polygon" ,
                        coordinates : [ [
                                          [ 0 , 0 ] ,
                                          [ 3 , 6 ] ,
                                          [ 6 , 1 ] ,
                                          [ 0 , 0 ]
                                        ] ]
                } } } } )

其他查询类似。

翻译自帮助文档:http://docs.mongodb.org/manual/core/2dsphere/

posted @ 2013-07-17 15:05  rovoqo  阅读(654)  评论(0编辑  收藏  举报