mongodb 地理位置索引

本文详细介绍了MongoDB中2d索引和平面索引的创建及查询方式,包括使用$near进行距离查询、$geomWithin进行形状内查询,并对比了2dsphere索引的特点及其查询方式。

2d索引和sdsphere索引的计算方式不一样

2d 索引 (平面索引)

1、创建方式

db.collection.createIndex({geom:"2d"})

geom:坐标字段,取值范围 经度[-180,180]  维度[-90,90]

2、查询方式

    $near:查询距离点最近的点, 默认返回100个。

    db.collection.find({geom:{$near:[118,34]}})

     db.collection.find({geom:{$near:[118,34],$maxDistance:10}})    //    最大距离

    $geomWithin:查询某个形状内的点

        $box  :矩形

        {$box:[[<X1>,<Y1>],[<X2>,<Y2>]]} 左边界,右边界

        db.collection.find({geom:{$geoWithin:{$box:[[0,0],[3,3]]}}}) 

        $center :圆形

         {$center:[[<X1>,<Y1>],r]}  r:半径

        db.collection.find({geom:{$geoWithin:{$center:[[0,0],10]}}}) 

        $polygon : 多边形

        {$polygon:[[<X1>,<Y1>],[<X1>,<Y1>],[<X1>,<Y1>],[<X1>,<Y1>]]}  坐标数组

         db.collection.find({geom:{$geoWithin:{$polygon:[[0,0],[0,1],[1,1],[1,0],]}}}) 

        geoNear查询

        命令:db.runCommand({

        geoNear:<collection>,    //集合名称

        near:[x,y],    //坐标

        minDistance:(对2d索引无效)

        maxDistance:10            //最大距离

        num:10        //限制返回的数据

        })

010859_cKel_1029162.png

011009_01Bm_1029162.png

 

2dsphere索引(球面地理位置索引)

    1、创建方式

       db.collection.createIndex({geom:"2dsphere"}) 

     2、位置表示方式

        GeoJSON:描述一个点、线、多边形等形状

     3、 格式:

        {type:"",coordinates:[<coordinates>]}

      查询方式和2d索引查询方式类似

      支持$minDistance与$maxDistance

       示例:

 

转载于:https://my.oschina.net/yangcaoling/blog/1589860

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值