我不确定是否有办法做到这一点。我需要在 mongodb 中有一个圆圈,并使用 $box 使用一个框对该圆圈进行查询,以查看这两个形状是否重叠。但是,Geojson 不支持圆圈。完成这项工作的最佳方法是什么?圆圈存储如下:
places = {
...
"location": {
"type": "Point",
"coordinates": [
-79.390756,
43.706685
]
},
"radius": 100
}
我有两个具体问题:
- 第一个问题是 maxDistance 与 Geojson 对象存储在同一个对象中,不能用于 $maxDistance 的 $near 查询;它只需要一个数字。
我在 Google Geocoding Api 上进行了部分邮政编码/邮政编码搜索,它返回一个带有两个角坐标的框,如下所示:
“几何”:{“边界”:{“东北”:{“纬度”:43.710565,“lng”:-79.37363479999999},“西南”:{“纬度”:43.690848,“lng”:-79.40025399999999}}据我所知,我不能使用 $box,因为它只适用于 $geoWithin。
编辑1: 我最初的圆圈和盒子计划发生了变化,主要是因为我没有找到适合这个问题的有效解决方案。现在我不是检查圆圈是否与框重叠,而是检查 Geojson 点是否在圆圈内,如下所示:
db.places.aggregate([
{"$geoNear": {near: { type: "Point", coordinates: [ -80.459293, 40.713640] },
distanceField: "dist.calculated", maxDistance: 100000,
key: 'myLocation', query: { 'SomeField': "..." }, spherical: true}},
{ "$match" : {$expr:{ $lte:['$dist.calculated', 'radius']}}}])
这里的问题是我必须先在 100 KM 内运行查询,然后在聚合的另一个阶段检查距离。 有没有更有效的方法来实现这一点?谢谢。