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

3

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

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

谢谢


这是一个C#项目吗?您是否可以访问Windows表单的System.Drawing库? - David Jiboye
是的,我正在使用一个C#项目来连接Mongo。我可以访问那个库。有没有一种方法可以使用这个库来完成这个任务? - David Graça
1个回答

2
这需要 rings.ring 是一个点,且已经在其上定义了地理索引,这样才能实现。请问这里是这种情况吗?
你的问题暗示着这实际上是一个具有标准索引(multikey index)的多个点的列表,这是行不通的。

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

正如您所看到的,在搜索多边形内的“loc”点时,“loc”字段是这样的(请参见上面的链接以获取其他有效示例):
{ loc : [ 50 , 30 ] }

使用类似以下语句创建索引:
db.places.ensureIndex( { loc : "2d" }
即,在一个表示单个点的字段上定义地理位置索引。如果您使用这样的字段,则测试是否有效?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接