Я работаю над приложением, которое должно найти ближайших дистрибьюторов определенного продукта. На данный момент у меня есть текущие координаты широты и долготы. Кроме того, у меня также есть список всех дистрибьюторов продукции с их соответствующими координатами. Я запускаю запрос, который дает мне ближайшие 10 местоположений, но для этого он тщательно проверяет каждую запись в БД, вычисляет расстояние между текущим и этим конкретным местоположением. Это занимает слишком много времени. Есть ли другая альтернатива, которую я могу принять?
Вопрос
Нужна помощь в поиске местоположения поблизости
Ответы
Ответ 1 · рейтинг 1 · Magic Bullet Dave
Не могли бы вы сначала сузить набор данных, создав максимальную и минимальную длину и широту (скажем, в пределах 10 миль от текущего местоположения). Затем вы можете запросить набор данных с помощью lat> minLat и lat ‹ maxLax и т. д. Затем вы можете отсортировать их, как вы предлагаете, вычислив фактические расстояния в сокращенном подмножестве, если вам это нужно.
Ответ 2 · рейтинг 1 · Joe
Чтобы избежать расчета расстояния в каждом месте, вы можете создать прямоугольник по широте (скажем, для 10 миль), используя максимальную верхнюю левую широту (10 миль вверх и 10 миль влево) и максимальную правую нижнюю широту (10 миль вниз и 10 миль). миль вправо). Затем ваш запрос найдет широту и длину в этом поле, используя >= и ‹=, а затем рассчитает расстояние для каждого из них, чтобы отфильтровать местоположения в углах, которые превышают 10 миль.
Еще один вариант - изучить пространственное индексирование для SQLite.
Ответ 3 · Dmitry Kachaev
Вы можете сузить список местоположений, создав прямоугольный буфер вокруг вашего местоположения, чтобы отфильтровать местоположения, которые находятся поблизости.
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 миля и т. д.)
Затем вы можете выполнить расчет расстояния по возвращенным записям.
Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.
Похожие материалы
- Определенные кадры фильма редактируются с помощью GPUImage
- IPhone: Как рассчитать размер пикселя на основе заданного размера изображения в дюймах?
- Нарисовать стрелку-пулю в Core Graphics
- Изменение фонового изображения UINavigationBar по умолчанию - iOS 4.3
- Как убедиться, что SQLite никогда не создает строку с одним и тем же идентификатором дважды?
- Какой драйвер ODBC использовать для sqlite и Sparx Systems Enterprise Architect?