我有一个mongo查询,用于检查点是否在多边形内。
neighborhood = db.collection.findOne({
loc: {$geoInteresects: {$geometry: {
type: 'Point',
coordinates: [lng, lat]
}}}
})
目前,我的所有多边形只是一个级别,一个邻域,并且没有一个重叠。
我想开始在同一个集合中存储城市,县和国家/地区数据。显然,我可以将findOne更改为查找和修改 适当的代码,但是,特别是,我希望结果排序 匹配,结果如下: [" Downtown"," San Francisco"," California"," US"," North America"]
对我来说,用它来构建一个很好的字符串是微不足道的。
我没有设置我的多级多边形,所以我没有测试过。
我知道$ near运算符返回一个对象的最近点,并且可以排序,但是我的假设,从阅读文档,是因为我的测试点在polgyon中,排序顺序是未定义的,并且我也冒着得到附近多边形的风险,然后我必须检查第二个地理设计,以确保我们不在其中。
答案 0 :(得分:0)
所以我以不同的方式解决了这个问题。在填充索引时,应该提前计算地理对象的面积。
我编写了代码来计算每个多边形的面积和边界,并在集合中插入,因此可以使用常规排序及其索引。
db.collection.find({
loc: {$geoInteresects: {$geometry: {
type: 'Point',
coordinates: [lng, lat]
}}}).sort({'properties.area': 1})
将始终提供我们匹配的最小多边形。如果Mongo可以做到这一点,那将是可爱的,但由于它可能是一个计算成本高昂的操作,即使使用梯形模型,也应该在插入时执行一次,而不是在查找时。