mongodb 计算坐标距离
2016-08-16 22:25
1391 查看
使用场景很多 ,不瞎比比了 ,直接上案例。
创建数据集合location:
查看数据:
注意:一定要建立2d索引,否则不能计算距离(我在这里掉坑了)
使用geoNear计算距离:
使用runCommand来执行geoNear命令。
默认会查询出前100条数据
在数据集环境中使用geoNear命令:
使用聚合查询,通过管道机制,能够方便的对数据进行过滤和排序等
查询结果:
更多参数见$geoNear (aggregation)
另外 $geoWithin 可以计算某点与几何图行的距离
创建数据集合location:
db.location.insert({loc:[1,3]}); db.location.insert({loc:[3,4]}); db.location.insert({loc:[0,-3]}); db.location.insert({loc:[-6,2]}); db.location.insert({loc:{x:9,y:5}}); db.location.insert({loc:{lng:-9.2,lat:21.3}});
查看数据:
db.location.find()
注意:一定要建立2d索引,否则不能计算距离(我在这里掉坑了)
db.location.ensureIndex({"loc":"2d"})
使用geoNear计算距离:
使用runCommand来执行geoNear命令。
db.runCommand({ "geoNear":"location", //指定要在那个数据集里查询 “near” : [0,0] //指点参与计算的目标点 })
默认会查询出前100条数据
db.runCommand({"geoNear":"location","near":[0,0]}) { "waitedMS" : NumberLong(0), "results" : [ { "dis" : 3, "obj" : { "_id" : ObjectId("57b313b9190404253628744e"), "loc" : [ 0, -3 ] } }, { "dis" : 3.1622776601683795, "obj" : { "_id" : ObjectId("57b313b9190404253628744c"), "loc" : [ 1, 3 ] } }, { "dis" : 5, "obj" : { "_id" : ObjectId("57b313b9190404253628744d"), "loc" : [ 3, 4 ] } }, { "dis" : 6.324555320336759, "obj" : { "_id" : ObjectId("57b313b9190404253628744f"), "loc" : [ -6, 2 ] } }, { "dis" : 10.295630140987, "obj" : { "_id" : ObjectId("57b313b91904042536287450"), "loc" : { "x" : 9, "y" : 5 } } }, { "dis" : 23.201939574095956, "obj" : { "_id" : ObjectId("57b313be1904042536287451"), "loc" : { "lng" : -9.2, "lat" : 21.3 } } } ], "stats" : { "nscanned" : 18, //在数据库操作期间扫描的索引项的总数 "objectsLoaded" : 6, //在数据库操作期间加载的数据项 "avgDistance" : 8.497400449264683, "maxDistance" : 23.201939574095956, "time" : 1 //查询使用的时间 毫秒作单位 }, "ok" : 1 }
在数据集环境中使用geoNear命令:
使用聚合查询,通过管道机制,能够方便的对数据进行过滤和排序等
db.location.aggregate({ $geoNear:{ near:[10,2], distanceField:"distance" //指定查询出来的距离数据的别名 } })
查询结果:
{ "_id" : ObjectId("57b313b91904042536287450"), "loc" : { "x" : 9, "y" : 5 }, "distance" : 3.1622776601683795 } { "_id" : ObjectId("57b313b9190404253628744d"), "loc" : [ 3, 4 ], "distance" : 7.280109889280518 } { "_id" : ObjectId("57b313b9190404253628744c"), "loc" : [ 1, 3 ], "distance" : 9.055385138137417 } { "_id" : ObjectId("57b313b9190404253628744e"), "loc" : [ 0, -3 ], "distance" : 11.180339887498949 } { "_id" : ObjectId("57b313b9190404253628744f"), "loc" : [ -6, 2 ], "distance" : 16 } { "_id" : ObjectId("57b313be1904042536287451"), "loc" : { "lng" : -9.2, "lat" : 21.3 }, "distance" : 27.223702907576 698 }
更多参数见$geoNear (aggregation)
另外 $geoWithin 可以计算某点与几何图行的距离
相关文章推荐
- iOS 计算两个坐标之间的距离
- C#实现根据地图上的两点坐标,计算直线距离
- GPS坐标(大地坐标)转高斯平面坐标,并计算 GPS 坐标(大地坐标)两点间的距离
- sql 计算地球2个坐标之间的距离
- php 计算两点地理坐标的距离
- 高德地图计算两坐标之间距离
- 使用iOS原生类计算两个坐标点之间的距离
- 计算两个经纬度坐标之间的距离
- mysql JS 计算两GPS坐标的距离函数:
- 【百度地图API】如何根据摩卡托坐标进行POI查询,和计算两点距离
- 计算两个坐标点之间的距离
- solr计算坐标距离
- 【百度地图API】如何根据摩卡托坐标进行POI查询,和计算两点距离
- 360oj 输入两点坐标(X1,Y1),(X2,Y2),计算并输出两点间的距离。
- PHP 根据两点的坐标计算之间的距离
- 两点距离 时间限制:3000 ms | 内存限制:65535 KB 难度:1 描述 输入两点坐标(X1,Y1),(X2,Y2)(0<=x1,x2,y1,y2<=1000),计算并输出两点间的距离。
- php计算两个坐标直线距离
- 在百度地图API开发中已知两个点之间的经纬度坐标计算其距离
- 【百度地图API】如何根据摩卡托坐标进行POI查询,和计算两点距离
- GPS定位坐标计算距离