我是 mongodb 地理定位功能的新手。
我在数据库中存储了一些代表国家边界的多边形以及国家名称。现在我想做的是检查一个点在哪个国家。例如,如果我给出自己的地理位置,我想得到我所在的国家。
有没有办法用 mongodb 做到这一点?也许与geoWithin?
谢谢
我是 mongodb 地理定位功能的新手。
我在数据库中存储了一些代表国家边界的多边形以及国家名称。现在我想做的是检查一个点在哪个国家。例如,如果我给出自己的地理位置,我想得到我所在的国家。
有没有办法用 mongodb 做到这一点?也许与geoWithin?
谢谢
You must store your location data like this schema:
{"loc":
{"coordinates":[
[
[1.0,1.0],
[1.0,10.0],
[10.0,10.0],
[10.0,1.0],
[1.0,1.0]
]
],
"type":"Polygon"
}
}
and then send $geoIntersects
queries
db.polygons.find({"loc":{"$geoIntersects":{"$geometry":{"type":"Point", "coordinates":[x, y]}}}}
你必须使用$geoIntersects
它。
db.features.find({mystoredpolygon:{$geoIntersects:{$geometry:{type:'Point', coordinates:[22,38]}}}})
是的,您可以$geoWithin
用于检查,前提是您使用 将国家定义为多边形GeoJSON
。为此,请尝试此 GitHub 存储库。
您的场景似乎与使用
$geoIntersects
而不是$geoWithin
.
如 MongoDB 文档中所示的示例,您可以使用 MongoDB 的$geoIntersects
地理空间查询功能,假设您的数据库中存储了一个表示国家/地区的多边形并且一个点是您的当前位置,您可以使用以下查询。
db.neighborhoods.findOne({
geometry: {
$geoIntersects: {
$geometry: {
type: "Point",
coordinates: [ -73.93414657, 40.82302903 ]
}
}
}
})
在哪里,neighborhood
是您的收藏,它存储在您所在国家/地区的多边形中。geometry
在第二行查询中是存储在 DB 中的实际多边形(它是 Geo-Json 格式)。并且"Point"
里面$geometry
是您当前所在的位置,您想要的国家/地区。