MongoDB-MongoDB中Geospatial采用geoNear查询出来之后的dis单位是什么?
MongoDB中Geospatial采用geoNear查询出来之后的dis单位是什么?
db.runCommand( { geoNear : "places" , near : [50,50], num : 10 } );
db.runCommand({geoNear:"asdf", near:[50,50]})
{
"ns" : "test.places",
"near" : "1100110000001111110000001111110000001111110000001111",
"results" : [
{
"dis" : 69.29646421910687,
"obj" : {
"_id" : ObjectId("4b8bd6b93b83c574d8760280"),
"y" : [
1,
1
],
"category" : "Coffee"
}
},
{
"dis" : 69.29646421910687,
"obj" : {
"_id" : ObjectId("4b8bd6b03b83c574d876027f"),
"y" : [
1,
1
]
}
}
],
"stats" : {
"time" : 0,
"btreelocs" : 1,
"btreelocs" : 1,
"nscanned" : 2,
"nscanned" : 2,
"objectsLoaded" : 2,
"objectsLoaded" : 2,
"avgDistance" : 69.29646421910687
},
"ok" : 1
}
到底dis的单位是度还是米,或者是公里?
在网上搜寻了许久,都没有明确的说明这个单位是什么,含糊其词,请大牛指点一下。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我采用的是mongodb2.6.0
使用的指令是
{
"geoNear": "mycollection",
"query": {
"$and": [
{
"_id": {
"$regex": "^lf:"
}
}
]
},
"near": {
"type": "Point",
"coordinates": [
116.479253991613,
39.9973768908142
]
},
"minDistance": 0,
"spherical": true,
"distanceMultiplier": 6371,
"num": 2
}
但是返回来的数据并不是公里,而是
{ "dis" : 2497413.3794890773 , "loc" : { "type" : "Point" , "coordinates" : [ 116.4746630635802 , 39.997201]}}
请问是我mongodb的版本问题,还是我处理的还是有问题
使用geoNear获得的结果里dis的单位,有两种情况:
1)spherical设为false(默认),dis的单位与坐标的单位保持一致
如果保存的是longitude/latitude,则dis的单位就是经度(或者纬度,单位是一致的)
如果保存的是meter,则dis的单位就是meter
2)spherical设为true,dis的单位是弧度
想要换算成公里(km)的话,
要么在程序里做,要么使用distanceMultiplier参数来定义转换方式:
对应于1)
如果要保存的坐标是经纬度,要计算的是公里,可设置 distanceMultiplier: 111
如果要计算英里,可将111换成69
对应于2)
如果要计算公里,可设置 distanceMultiplier: 6371
如果要计算英里,则需要把6371换成3959