MongoDB-MongoDB中Geospatial采用geoNear查询出来之后的dis单位是什么?

发布于 2016-12-18 07:51:22 字数 1882 浏览 1264 评论 2

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

瑾兮 2017-08-29 11:46:58

我采用的是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的版本问题,还是我处理的还是有问题

清晨说ぺ晚安 2017-02-03 08:00:22

使用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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文