0

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

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

目前,我所有的多边形都只是一个层次,一个邻域,而且没有一个重叠。

我想开始将城市、县和国家/地区数据存储在同一个集合中。显然,我可以将 findOne 更改为 find 并适当地修改代码,但是,特别是,我希望结果对匹配项进行排序,因此结果是:[ "Downtown", "San Francisco", "California", "美国”、“北美”]

对我来说,从中构建一个漂亮的字符串是微不足道的。

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

我知道 $near 运算符返回到对象的最近点,并且可以排序,但我的假设是,通过阅读文档,由于我的测试点在 polgyon 内,排序顺序将是未定义的,我也运行还有获得附近多边形的风险,然后我必须检查第二个地理相交以确保我们不在其中。

4

1 回答 1

0

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

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

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

总是会给出我们匹配的最小多边形。如果 Mongo 可以做到这一点,那就太好了,但由于它可能是一个计算量很大的操作,即使使用梯形模型,它也应该在插入时完成一次,而不是在查找时完成。

于 2016-06-03T02:38:22.673 回答