Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Нужна помощь в поиске местоположения поблизости

Автор вопроса: slonkarОтветов: 3

Я работаю над приложением, которое должно найти ближайших дистрибьюторов определенного продукта. На данный момент у меня есть текущие координаты широты и долготы. Кроме того, у меня также есть список всех дистрибьюторов продукции с их соответствующими координатами. Я запускаю запрос, который дает мне ближайшие 10 местоположений, но для этого он тщательно проверяет каждую запись в БД, вычисляет расстояние между текущим и этим конкретным местоположением. Это занимает слишком много времени. Есть ли другая альтернатива, которую я могу принять?

iphonesqlitemapkitcore-location

Ответы

Ответ 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.

Похожие материалы