Поиск по всем полигонам, содержащим ряд точек в mongodb
Мой вопрос похож на этотПо заданному набору полигонов и серии точек найдите, какие полигоны являются точками, расположенными
У меня есть база данных mongodb с двумя коллекциями,районы который хранит набор полигонов (провинций Италии), иточки который хранит набор образцов, каждый из которых имеет пару координат. Я использую mongodb 2.4 и формат GeoJSON для хранения данных, обе коллекции имеют индекс 2dsphere.
Я могу определить, находится ли заданная точка внутри заданного многоугольника.
Теперь я хотел бы найти все полигоны, которые содержат список образцов, чтобы нарисовать карту, как этаhttp://www.peerates.org/province.png
Есть ли лучшее решение, чем перебирать все точки и проверять, находится ли оно внутри каждого многоугольника, используя геоиндексы mongodb?
редактировать: я нашел частичное решение с помощью функции, хранящейся в коллекции system.js
function(){
var found = [];
var notfound = [];
db.regions.find().forEach(
function(region){
var regionId = region._id;
var query = {
'loc':{
$geoWithin: {
$geometry: region.loc
}
}
};
var len = db.points.find(query).size();
if(len>0){
found.push(regionId);
}else{
notfound.push(regionId);
}
}
);
return {
"found":found,
"notfound":notfound
};
}
к сожалению, я не могу использовать его на mongohq.com, похоже, eval () больше не поддерживается.
@RickyA спасибо, рассмотрим переход на постгис