我的数据库中有两个集合:Post和Gallery。 Post有一个GeoJSON Point位置,gallery是一个帖子集合。画廊的位置是GeoJSON Polygon,它限制了画廊的帖子(使用quickhull算法)。我现在需要查询某个点x英里内的所有画廊,但即使我从我的多边形旁边查询,我也没有得到任何结果。
我希望该行为与以下内容完全相同:
db.posts.find({
'location': {
$geoWithin: {
$centerSphere: [[-70, 30], 1000/3959]
}
}
});
此处,返回半径内的所有帖子。但是,当我以这种方式运行相同类型的函数时,我什么都没有返回,这是不正确的:
db.galleries.find({
'location': {
$geoWithin: {
$centerSphere: [[-70, 30], 1000/3959]
}
}
});
我的一个画廊有以下位置(是2dsphereIndexVersion = 2
的2dsphere索引):
"location": {
"type": "Polygon",
"coordinates": [
[
[
-73.986882,
40.682829
],
[
-73.971089,
40.6672045
],
[
-73.955296,
40.65158
],
[
-73.986882,
40.682829
]
]
]
}
如何查询至少与我的半径相交的位置多边形?
答案 0 :(得分:0)
我遇到了同样的问题并尝试了您最初尝试过的完全相同的查询。我不确定为什么它不起作用,但我最终能够$near完成这项工作。请记住,$ near在计算$ maxDistance时使用米,所以我不得不将我的10英里所需距离转换为米乘以1609.34。这是我最终使用的查询:
db.maTowns.find(
{
'geometry': {
$near: {
$geometry: {
'type': "Point",
'coordinates': [ -71, 42 ]
},
$maxDistance: 10 * 1609.34
}
}
}
)
答案 1 :(得分:0)
选择点半径内的所有多边形
通过最近发布的MongoDB版本def for_each(action, *iterables):
for t in zip(*iterables):
action(*t)
for_each(os.rename, py_files, dst_py_files)
,您现在可以使用$geoWithin地理空间运算符$centerSphere查询GeoJSON LineStrings和多边形。
有关更改的详细信息,另请参阅SERVER-27968。请注意,此更改有待反向移植。
也可能与3.6.0-rc0
相关,而$geoIntersects
则为SERVER-30390