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

谢谢

4

1 回答 1

2

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

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

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

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

{ loc : [ 50 , 30 ] }

使用这样的索引:

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

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

于 2012-08-23T17:25:34.640 回答