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

Posted

技术标签:

【中文标题】Mongodb:如何检查一个点是不是包含在多边形中?【英文标题】:Mongodb: How can I check if a point is contained in a polygon?Mongodb:如何检查一个点是否包含在多边形中? 【发布时间】:2012-08-23 16:14:45 【问题描述】:

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

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 库吗? 是的,我正在使用 C# 项目连接到 mongo。我可以访问那个图书馆。有没有一种表格可以使用这个库来完成这个? 【参考方案1】:

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

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

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

如您所见,当您搜索“loc”作为多边形内的一个点时,“loc”字段是这样的(有关其他有效示例,请参见上面的链接):

 loc : [ 50 , 30 ] 

使用类似这样的索引:

db.places.ensureIndex( loc : "2d"

即表示单个点并在其上定义地理索引的字段。如果您使用这样的字段 - 您的测试是否有效?

【讨论】:

以上是关于Mongodb:如何检查一个点是不是包含在多边形中?的主要内容,如果未能解决你的问题,请参考以下文章

查找给定的经纬度是不是位于 MongoDB 中的任何多边形中

如何在 MongoDB 中正确使用 $geoIntersects?

如何检查4个点是不是形成凸四边形

Java geotools检查点是不是包含在具有容差的多边形中

如何检查给定坐标是不是属于多边形? (离线地理围栏)

如何检查数组字段是不是包含唯一值或 MongoDB 中的另一个数组?