2012-08-23 140 views
3

我已經獲得了點(緯度,經度)數組中點的列表。我已經對這些數組做了一個索引,現在我想知道一個點是否在該多邊形內。Mongodb:如何檢查點是否包含在多邊形中?

MongoDB有可能嗎? 我已經與這些命令,但沒有運氣嘗試:

> polygonA = [ [ 48.780809,2.307129],[ 48.781809,2.300129],[ 48.770809,2.317129]] 
> db.contours.find({ "rings.ring" : { "$within" : { "$polygon" : polygonA } } }) 

> db.runCommand({ geoNear : "contours" , within : [2.307129,48.780809,], num : 10 }); 

我的數據結構爲:

> db.contours.findOne({},{'rings':0}) 
{ 
     "_id" : ObjectId("50364617d591ac166000c196"), 
     "foundfieldname" : "Name", 
     "geometrytype" : "geometryPolygon", 
     "attributes" : { 
       "Shape" : "Polygon", 
       "Name" : "France", 
       "Type" : "Country", 
       "Country" : "France", 
       "Area" : "1162358716567.45" 
     }, 
     "country" : "France", 
"rings":{ 
     "ring":[[12.32,43.54],...], 
      ... 
} 

感謝

+0

這是一個C#項目嗎?你有沒有訪問Windows窗體的System.Drawing庫? –

+0

是的我正在使用C#項目來連接到mongo。我可以訪問該庫。有沒有一種形式來使用這個庫來完成這個? –

回答

2

這就要求rings.ring是一個點,它有一個地理索引定義它,是這裏的情況?

你的問題意味着這實際上是一個帶有標準索引(多鍵索引)的多點列表,它不起作用。

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

正如你可以看到有,當你搜索「祿」作爲多邊形內部的一個點,「祿」字段是這樣的(參見上述其他有效實例的鏈接):

{ loc : [ 50 , 30 ] } 

與索引是這樣的:

db.places.ensureIndex({LOC: 「2D」}

即,一個字段,作爲表示單點和其上定義的地理索引。如果你使用這樣的領域 - 你的測試是否可行?

相關問題