mongodb $ geoIntersects或$ geoWithin一个点匹配多个多边形 - 按区域排序?

时间:2016-06-02 23:48:36

标签: mongodb sorting 2dsphere

我有一个mongo查询,用于检查点是否在多边形内。

neighborhood =  db.collection.findOne({
    loc: {$geoInteresects: {$geometry: {
        type: 'Point',
        coordinates: [lng, lat]
    }}}
})

目前,我的所有多边形只是一个级别,一个邻域,并且没有一个重叠。

我想开始在同一个集合中存储城市,县和国家/地区数据。显然,我可以将findOne更改为查找和修改 适当的代码,但是,特别是,我希望结果排序 匹配,结果如下:     [" Downtown"," San Francisco"," California"," US"," North America"]

对我来说,用它来构建一个很好的字符串是微不足道的。

我没有设置我的多级多边形,所以我没有测试过。

我知道$ near运算符返回一个对象的最近点,并且可以排序,但是我的假设,从阅读文档,是因为我的测试点在polgyon中,排序顺序是未定义的,并且我也冒着得到附近多边形的风险,然后我必须检查第二个地理设计,以确保我们不在其中。

1 个答案:

答案 0 :(得分:0)

所以我以不同的方式解决了这个问题。在填充索引时,应该提前计算地理对象的面积。

我编写了代码来计算每个多边形的面积和边界,并在集合中插入,因此可以使用常规排序及其索引。

db.collection.find({
    loc: {$geoInteresects: {$geometry: {
    type: 'Point',
    coordinates: [lng, lat]
}}}).sort({'properties.area': 1})

将始终提供我们匹配的最小多边形。如果Mongo可以做到这一点,那将是可爱的,但由于它可能是一个计算成本高昂的操作,即使使用梯形模型,也应该在插入时执行一次,而不是在查找时。