Как найти местоположения (Lat, Long) на расстоянии от моей пользовательской позиции (Lat, Long) с помощью solr? - PullRequest
1 голос
/ 18 апреля 2019

У меня есть список координат магазина (Lat, Long) с заданным радиусом видимости. У меня также есть пользовательская позиция (Lat, Long). Я хочу найти все координаты магазина, для которых позиция пользователя находится в пределах видимости магазина. Проблема должна быть решена с помощью Solr.

В настоящее время я создаю круги в виде полигонов вокруг координат магазина. Если пользовательская позиция находится внутри многоугольника, я возвращаю координату магазина. Этот подход работает, но индексация полигонов слишком медленная (200 000 полигонов -> 40 минут).

Есть ли лучшее решение?

1 Ответ

0 голосов
/ 18 апреля 2019

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

Это означает исключение всех магазинов, которые не находятся в «видимой области» вокруг пользователя (поскольку расстояние от A до B взаимозаменяемо с расстоянием отОт B до A ).

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

Вот пример использования произвольных пользовательских координат pt=45.91,6.13 и функции field() для получения значения радиуса магазина:

fq={!geofilt sfield=store_coord pt=45.91,6.13 d=field(store_visibility)}

.. при условии, что store_coord или эквивалент определен как LatLonPointSpatialField (или местоположение) и store_visibility определен как целое число.

Добавьте fl=geodist() к вашему запросу, чтобы проверить фактическое расстояние от пользователя до каждого подходящего местоположения магазина, рассчитанное {! Geofilt}.

Аналогично можно сортировать по расстоянию: sort=geodist()+asc

...