2012-08-02 34 views
2

是否有可能在兩個圓的區別中在所得區域中執行MongoDB中的地理空間搜索。假設我有一個半徑爲x的圓A和另一個半徑爲y的圓B,其中y> x。我需要找到B - A內部的所有點。這對MongoDB是否可行?我知道MongoDB支持多邊形搜索,但也許有更好的方法。請記住,我正在使用mongoid從rails應用程序中使用Mongo。如何在MongoDB中兩個圓的區別內執行地理搜索=

回答

4

是的,這是可能的。 使用$within運營商。

http://www.mongodb.org/display/DOCS/Geospatial+Indexing/#GeospatialIndexing-Querying

界限查詢

$內可以用來代替$附近找到一個形狀內的項目。結果不按距離排序,這可能會導致在不需要此排序時更快的查詢。支持$ box(矩形),$ center(圓形)和$ polygon(凹凸多邊形)類型的形狀。所有邊界查詢都隱含地將邊界作爲邊界的一部分包含進來,儘管由於浮點不準確而不能嚴格依賴。

要查詢的矩形內的所有點,必須指定左下和右上拐角:

中心= [50,50: 圓被一箇中心點和半徑指定的] 半徑= 10 db.places.find({ 「LOC」:{ 「內$」:{ 「$中心」:[中心,半徑]}}})

一種方法是,你可以在兩個圓圈內找到點,然後做一組相交。 如果這兩個圓是同心圓的,或者如果不是同心圓的,但有一些重疊的區域,這將適用於這兩種情況。

+0

這看起來像只有可能的方法。 $內部沒有像$ annularRing這樣的運算符。 – 2012-08-02 05:35:09

+0

謝謝,它的工作原理 – rusllonrails 2015-12-08 13:55:21