Я работаю над приложением, которое должно найти ближайших дистрибьюторов определенного продукта. На данный момент у меня есть текущие координаты широты и долготы. Кроме того, у меня также есть список всех дистрибьюторов продукции с их соответствующими координатами. Я запускаю запрос, который дает мне ближайшие 10 местоположений, но для этого он тщательно проверяет каждую запись в БД, вычисляет расстояние между текущим и этим конкретным местоположением. Это занимает слишком много времени. Есть ли другая альтернатива, которую я могу принять?
Нужна помощь в поиске местоположения поблизости
Ответы (3)
Не могли бы вы сначала сузить набор данных, создав максимальную и минимальную длину и широту (скажем, в пределах 10 миль от текущего местоположения). Затем вы можете запросить набор данных с помощью lat> minLat и lat ‹ maxLax и т. д. Затем вы можете отсортировать их, как вы предлагаете, вычислив фактические расстояния в сокращенном подмножестве, если вам это нужно.
Чтобы избежать расчета расстояния в каждом месте, вы можете создать прямоугольник по широте (скажем, для 10 миль), используя максимальную верхнюю левую широту (10 миль вверх и 10 миль влево) и максимальную правую нижнюю широту (10 миль вниз и 10 миль). миль вправо). Затем ваш запрос найдет широту и длину в этом поле, используя >= и ‹=, а затем рассчитает расстояние для каждого из них, чтобы отфильтровать местоположения в углах, которые превышают 10 миль.
Еще один вариант — изучить пространственное индексирование для SQLite.
Вы можете сузить список местоположений, создав прямоугольный буфер вокруг вашего местоположения, чтобы отфильтровать местоположения, которые находятся поблизости.
SELECT * FROM table t WHERE t.lat‹(lat+buff) AND t.long‹(long+buff) AND t.lat>(lat-buff) AND t.long>(long-buff)
lat, long — ваше местоположение, buff — некоторое значение, которое вы можете настроить в соответствии с потребностями вашего приложения (например, 100 футов, 1 миля и т. д.)
Затем вы можете выполнить расчет расстояния по возвращенным записям.