2013-04-07 78 views
16

我是新來的mongodb地理定位功能。Mongodb:檢查一個點是否在一個存儲的多邊形內

我將一些代表國家邊界的多邊形與國家名稱一起存儲在數據庫中。 現在我想要做的是檢查一個點在哪個國家。 例如,如果我給我自己的地理定位,我想獲得我所在的國家。

有沒有辦法用mongodb做到這一點?也許與geoWithin?

謝謝

+0

請檢查這個答案:http://stackoverflow.com/questions/ 12095965/mongodb-how-can-i-check-if-a-point-is-contained-in-a-polygon和http://stackoverflow.com/questions/10774427/how-to-find-ifa-a-點存在功能於該多邊形。看起來這兩者都是相關的並且有解決方案。 – brotherofken 2013-04-07 19:17:56

+2

我需要相同的。 @brotherofken:這個問題恰恰相反:我需要搜索至少包含參數點的多邊形(存儲在mongodb上)。在這個方向我找不到任何例子。 – 2013-09-12 09:15:22

+0

我需要找到一個點是否在一個閉合的圓內。任何導致我將如何實現這一目標? – 2016-02-18 07:44:32

回答

4

是的,你可以使用$geoWithin的檢查,只要你定義了國家的使用GeoJSON多邊形。爲此,請嘗試this GitHub repo

+1

謝謝你的多邊形,但我有一個更精確的設置,我不記得我在哪裏得到它。 您是否認爲我將不得不遍歷所有這些多邊形以查找其中的重點是或不確定mongodb geoWithin可以幫助我避免這種回溯? – SkinyMonkey 2013-04-08 12:14:09

+0

$ geoWithin使用單個多邊形。 – Sim 2013-04-11 06:48:33

+1

geoWithin返回*多邊形內的所有特徵*。 geoIntersects返回*與特徵相交的特徵(在這種情況下爲點)。因此,在這種情況下,geoIntersects在某個查詢中給出了您想要的內容,而您必須對每個多邊形運行geoWithin。 – 2016-02-13 21:39:27

5

您必須使用$geoIntersects

db.features.find({mystoredpolygon:{$geoIntersects:{$geometry:{type:'Point', coordinates:[22,38]}}}}) 
+0

是的,$ geoIntersects的作品。 這是參考鏈接:[MongoDB $ geoIntersects](http://docs.mongodb.org/manual/reference/operator/query/geoIntersects/) – Adam 2015-02-04 21:24:01

6

您必須存儲您的位置數據是這樣的模式:

{"loc": 
    {"coordinates":[ 
     [ 
     [1.0,1.0], 
     [1.0,10.0], 
     [10.0,10.0], 
     [10.0,1.0], 
     [1.0,1.0] 
     ] 
     ], 
    "type":"Polygon" 
    } 
} 

,然後發送$geoIntersects查詢

db.polygons.find({"loc":{"$geoIntersects":{"$geometry":{"type":"Point", "coordinates":[x, y]}}}} 
+0

爲什麼有一個數組中的座標數組的任何理由?什麼會增加另一組座標爲我們做?例如[[[1,1],...],[[2,2] ...]] – 2014-09-15 08:45:47

+0

也許一個多邊形可以位於另一個內部 – 2014-11-17 10:04:08

+0

是的,我發現前一陣子下一個數組元素指定「切出」外部多邊形。 https://developers.google.com/maps/documentation/javascript/examples/layer-data-simple – 2014-11-18 10:55:52

相關問題