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?