我是mongodb地理定位功能的新手。
我在数据库中存储了一些代表国家/地区边界的多边形以及国家/地区名称。 现在我想做的是检查一个点在哪个国家。 例如,如果我给自己的地理位置,我想得到我所在的国家。
有没有办法用mongodb做到这一点?也许用geoWithin?
谢谢
答案 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
是您要指定国家/地区的当前位置。