Mongodb:如何检查多边形中是否包含一个点?

我有一个点arrays(纬度,经度)区域的点列表。 我已经在这些数组上做了一个索引,现在我想知道一个点是否在该多边形内。

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],...], ... } 

谢谢

这要求ring.ring是一个点,并且它上面定义了地理索引,这是这种情况吗?

你的问题暗示这实际上是一个包含标准索引的多个点的列表(多键索引),这是行不通的。

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

正如你在那里看到的,当你搜索“loc”作为多边形内的一个点时,“loc”字段是这样的(参见上面的链接获取其他有效示例):

 { loc : [ 50 , 30 ] } 

使用这样的索引:

db.places.ensureIndex({loc:“2d”}

也就是说,表示单个点并在其上定义地理索引的字段。 如果您使用这样的字段 – 那么您的测试是否有效?