2010-10-07 40 views
16

我在地理位置上有一个地理空间索引的商店集合。MongoDB绑定查询:我如何将英里转换为弧度?

我想要做的是给定用户的纬度,纬度和搜索半径(mi),我想返回这些参数中的商店列表。

我在MongoDB文档(http://www.mongodb.org/display/DOCS/Geospatial+Indexing)上看到下面的例子,但它看起来像距离是弧度。

center = [50, 50] 
radius = 10 
db.places.find({"loc" : {"$within" : {"$center" : [center, radius]}}}) 

那么,公里转换为弧度的公式是什么?

解决方案 在mongodb用户真棒的人帮助我找到答案。 基本上,我真正想要的是一种限制距离的方法。

每时,更新的文档,有近查询$一个第三个参数: 您还可以使用$附近具有最大距离

db.places.find({ loc : { $near : [50,50] , $maxDistance : 5 } }).limit(20) 

为$ maxDistance值是弧度;所以,我不得不把我的距离以英里为单位除以69.

谢谢!

+0

我可以张贴我的问题上mongdb用户谷歌集团找到我的答案(http://groups.google.com/group/mongodb-user/browse_thread /线程/ d37c781bbfff5f08)。 – Abe 2010-10-12 00:06:03

+4

注意:除以69是从英里到*度*的粗略转换,不是弧度。度数在这里是正确的,因为这是一个简单的ol“'near'查询(这意味着'$ maxDistance'必须与坐标位置相同),而不是球形查询(它* do *需要'$ maxDistance'来以弧度表示)。 – 2011-05-17 03:15:48

回答

15

由于文档说:

所有的距离使用弧度。这使您可以轻松乘以地球半径(约6371公里或3959英里),以获得您选择单位的距离。相反,在进行查询时除以地球半径。

所以你简单的需要用你的半径除以地球半径。 在你的例子那就是:

radius = 10/3959
+0

对不起,我不这么认为。我没有得到任何结果,当我在SQL Server中运行等价物时,我得到结果 – Abe 2010-10-07 19:24:31

+0

您使用的是什么版本的MongoDb? – walla 2010-10-08 05:09:46

+0

我正在使用版本1.6.3的Windows 64位 – Abe 2010-10-10 08:16:40