Mongodb:检查点是否在存储的多边形内

时间:2013-04-07 18:58:48

标签: mongodb geolocation polygon

我是mongodb地理定位功能的新手。

我在数据库中存储了一些代表国家/地区边界的多边形以及国家/地区名称。 现在我想做的是检查一个点在哪个国家。 例如,如果我给自己的地理位置,我想得到我所在的国家。

有没有办法用mongodb做到这一点?也许用geoWithin?

谢谢

4 个答案:

答案 0 :(得分:7)

您必须存储您的位置数据,例如此架构:

{"loc":
     {"coordinates":[
       [
         [1.0,1.0],
         [1.0,10.0],
         [10.0,10.0],
         [10.0,1.0],
         [1.0,1.0]
       ]
      ],
     "type":"Polygon"
   }
}

然后发送$geoIntersects次查询

db.polygons.find({"loc":{"$geoIntersects":{"$geometry":{"type":"Point", "coordinates":[x, y]}}}}

答案 1 :(得分:5)

你必须使用$geoIntersects

db.features.find({mystoredpolygon:{$geoIntersects:{$geometry:{type:'Point', coordinates:[22,38]}}}})

答案 2 :(得分:4)

是的,如果您使用GeoJSON将国家/地区定义为多边形,则可以使用$geoWithin进行检查。为此,请尝试this GitHub repo

答案 3 :(得分:0)

您的情况似乎与使用$geoIntersects而不是MongoDB Geo-spatial Tutorial的示例相同 $geoWithin

如在MongoDB文档中显示的示例中,您可以使用MongoDB的$geoIntersects地理空间查询功能,假设您有一个表示存储在数据库中的国家/地区的多边形,而一个点是您的当前位置,则可以使用以下查询。

db.neighborhoods.findOne({
     geometry: { 
        $geoIntersects: {
             $geometry: { 
                type: "Point", 
                coordinates: [ -73.93414657, 40.82302903 ] 
            }
        } 
    } 
})

其中neighborhood是您的收藏集,存储在案例国家/地区的多边形中。第二行查询中的geometry是存储在数据库中的实际多边形(Geo-Json格式)。 "Point"内的$geometry是您要指定国家/地区的当前位置。