Обратите внимание, это другой вопрос не то, что я ищу. Он ищет все точки на пересечении двух запросов. Я просто хочу проверить, пересекаются ли два круга / многоугольника.
Мое приложение позволяет пользователям поблизости встречаться лично. Когда пользователи регистрируются в моем приложении, они указывают свое местоположение. После этого они определяют круг определенного радиуса, в пределах которого они могут захотеть встретиться с другими пользователями. То есть они сообщают моему серверу радиус, и он может использовать его позже с $centerSphere
запросами.
Когда пользователь ищет пользователей, которые встречаются рядом с ним, я хочу вернуть всех тех пользователей, радиус которых, в пределах которого они будут готовы встретиться, пересекает радиус пользователя, выполняющего поиск.
То есть, предположим, на диаграмме ниже кружки представляют радиусы, в пределах которых пользователи Алиса, Боб и Чарли будут готовы встретиться соответственно.
Если пользователь Алиса ищет соседних пользователей, она должна видеть в результате Чарли, но не Боба, поскольку границы Алисы и Боба пересекаются. Если Боб ищет соседних пользователей, он увидит Чарли, но не Алису. Наконец, если Чарли ищет соседних пользователей, он увидит и Алису, и Боба.
Мне интересно, возможно ли выполнить этот тип запроса с MongoDB.
Потенциальный подход
Вот потенциальный подход, который я изобразил. Когда пользователь определяет область встречи (выбирая радиус на основе своего местоположения), приблизьте этот круг к многоугольнику - например, с более чем 32 ребрами. Сохраните этот многоугольник как GeoJSON в документе пользователя.
Когда другой пользователь выполняет поиск, запросите $geoIntersects
a $centerSphere
, который должен вернуть всех пользователей, которые пересекают центральную сферу. Это звучит правильно?
Спасибо.