Найти несколько полигонов, пересекающих несколько точек - PullRequest
0 голосов
/ 04 сентября 2018

Предположим, у меня есть 5 000 полигонов в MongoDB, и я хочу запросить их с 25 разбросанными точками (то есть не сильно сгруппированными относительно полигонов). Есть ли способ эффективно запросить базу данных?

Насколько я понимаю, вы можете сгруппировать точки в один элемент геоджона и выполнить пересечение. Но это плохая идея, так как ограничивающий прямоугольник вокруг множества точек будет огромным, и, таким образом, вы не получите никакой выгоды от какого-либо существующего индекса на многоугольниках.

В качестве альтернативы вы могли бы сделать $ или запрос (я проверю себя, чтобы увидеть, возможно ли это), но, вероятно, это будет рассматривать каждый бит изолированно, что кажется немного неэффективным (хотя и намного лучше, чем предыдущий вариант).

В идеале я бы хотел что-то вроде postgis (псевдокод):

select * from polygon_table
where geometry in ($1,$2,$3...)

насколько я знаю, это будет работать так же хорошо, как логически возможно (вроде).

cartoon of points and polygons

1 Ответ

0 голосов
/ 04 сентября 2018

25 $ geoIntersects , завернутый в $ или .

1007 * Е.Г. *

db.collection.find({ $or: [
     { loc: {
       $geoIntersects: {
          $geometry: { type: "Point", coordinates: [ 3, 4 ] } }
       }
     } },
     { loc: {
       $geoIntersects: {
          $geometry: { type: "Point", coordinates: [ 10, 20 ] } }
     } }

] })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...