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

《MongoDB权威指南》学习整理----MongoDB对GIS应用的支持

2014-02-26 16:26 274 查看

地理空间索引

地理空间索引是MongoDB专门为当前热门的GIS应用提供的特殊索引支持。这种索引和普通的索引创建、删除方式相同,不同的是这种索引的在创建时候的值:

创建方法

db.collection.ensureIndex({keyName:"2d"},{'min':-1000,max:1000})

注意,这里使用的是"2d"而不是表示排序的1或-1。同时对key的值当然也有比较严格要求:

建立地理空间索引的key的value值必须是某种形式的一对值:一个包含两个元素的数组或包含两个键的文档。默认情况下该索引值的范围是-180到180(经纬度),也可以通过min、max来确定。

 

查询方法

对于地理空间索引的查询分为两种情况:

普通查询

普通查询和我们上边讲到的find差别不大,但是引入了另一些专门用于GIS查询的新条件句和命令,以下的条件句必须是建立在创建2dIndex之后才能够使用,否则MongoDB会提示13038错误:

$near

db.collection.find({keyName:{'$near':[value1,value2]}})

会按value1,value2为中心由近及远的将集合中的所有文档都返回,没有指定limit的时候默认是100个文档,可以通过limit减少查询内容。

geoNear

db.runCommand({geoNear:collectionName,near:[value1,value2],num:显示数字(limit作用)})

这个使用runCommand形式的查询和$near条件句类似,但是geoNear可以返回每个文档距离目标value1,value2的距离,以'dis'来表示,但是当查询的数据大于4M,就只能至少用$near条件句方式。

$within

矩形:db.collection.find({keyName,{'$within':{'$box':[[左下角坐标],[右上角坐标]]}}})

圆形:db.collection.find({keyName,{'$within':{'$center':[[圆心坐标],半径]}}})

不只是根据点找附近点的功能,MongoDB还提供了形状(矩形、圆形和多边形)范围内查找的功能。

 

查询提示

在实际使用的时候不只是范围,同时还有范围内的某个资源,所以,一般在每个资源文档上都创建一个关键字key来描述该文档数据哪种资源。这样就可以快速的超找到某个范围内的某些资源。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息