MongoDB中:如何检查点是否包含在一个多边形?(Mongodb: How can I check

2019-09-21 13:44发布

我得在点(纬度,经度)阵列的区域的点的列表。 我已经在做这些阵列的索引,现在我想知道,如果一个点是多边形内。

是否有可能与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],...],
           ...
 }

谢谢

Answer 1:

这就要求rings.ring是一个点,它已在其上定义地理指标,这里是这样吗?

你的问题意味着,其实这是上有一个标准指数(多键索引),这是行不通的多个点的列表。

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

正如你可以看到有,当你搜索“禄”作为多边形内部的一个点,“禄”字段是这样的(参见上述其他有效实例的链接):

{ loc : [ 50 , 30 ] }

随着指数是这样的:

db.places.ensureIndex({LOC: “2D”}

即,表示一个单一的点,并用在其上定义的地理索引的字段。 如果使用这样的一个领域 - 您的测试工作呢?



文章来源: Mongodb: How can I check if a point is contained in a polygon?