我有一个用户集合,每个用户都有一个点
userSchema
username: string,
location: {
type: { type: String, default: 'Point' },
coordinates: {type: [Number], default: [0,0] }
},
此外,我还有一个位置集合,其中每个位置都是多边形。
locationsSchema
name: {type: String, required: true},
area: {
type: { type: String, default: 'Polygon' },
coordinates: {type: [], required: true }
}
现在我说我选择了2个位置的poygons [id1,id2]。我想找到这个位置内的所有用户,即poygon id1和id2。 我该怎么做?
我知道如果我有一点我可以找到像这样的多边形
db.locations.find({"loc":{"$geoIntersects":{"$geometry":{"type":"Point", "coordinates":[x, y]}}}}
但是,如果我被赋予多边形并且想要找到其中的所有用户呢?
修改
我想出了一个多边形,我可以做到这一点
User.find({location: { $geoWithin: { $geometry: locations[0] }}});
我如何处理多个多边形?
答案 0 :(得分:0)
对于有此问题的任何人。我只是通过创建遍历所有多边形的Multipolygon来解决它。
var loc_json = {type: 'MultiPolygon', coordinates: []};
var flat_loc = _.flatMap(all_loc, 'locations');
var locations = [];
_.forEach(flat_loc, function(loc) {
locations.push(loc.area.coordinates);
});
loc_json.coordinates = locations;
User.find({location: { $geoWithin: { $geometry: loc_json }}});