Запрос геопространственного пересечения многоугольников или окружностей с MongoDB - PullRequest
0 голосов
/ 28 апреля 2019

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

Мое приложение позволяет пользователям поблизости встречаться лично. Когда пользователи регистрируются в моем приложении, они указывают свое местоположение. После этого они определяют круг определенного радиуса, в пределах которого они могут захотеть встретиться с другими пользователями. То есть они сообщают моему серверу радиус, и он может использовать его позже с $centerSphere запросами.

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

То есть, предположим, на диаграмме ниже кружки представляют радиусы, в пределах которых пользователи Алиса, Боб и Чарли будут готовы встретиться соответственно.

Если пользователь Алиса ищет соседних пользователей, она должна видеть в результате Чарли, но не Боба, поскольку границы Алисы и Боба пересекаются. Если Боб ищет соседних пользователей, он увидит Чарли, но не Алису. Наконец, если Чарли ищет соседних пользователей, он увидит и Алису, и Боба.

enter image description here

Мне интересно, возможно ли выполнить этот тип запроса с MongoDB.

Потенциальный подход

Вот потенциальный подход, который я изобразил. Когда пользователь определяет область встречи (выбирая радиус на основе своего местоположения), приблизьте этот круг к многоугольнику - например, с более чем 32 ребрами. Сохраните этот многоугольник как GeoJSON в документе пользователя.

Когда другой пользователь выполняет поиск, запросите $geoIntersects a $centerSphere, который должен вернуть всех пользователей, которые пересекают центральную сферу. Это звучит правильно?

Спасибо.

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