Нужна помощь в поиске соседнего места - PullRequest
0 голосов
/ 17 августа 2011

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

Ответы [ 3 ]

1 голос
/ 17 августа 2011

Чтобы избежать вычисления расстояния в каждом месте, вы можете создать прямоугольник длиной в лат (скажем, для 10 миль), используя максимальный верхний левый лат в длину (10 миль вверх и 10 миль влево) и максимальный нижний правый лат в длину (10 миль)вниз и 10 миль вправо).Затем ваш запрос найдет в этом поле значения long long, используя> = и <=, а затем вычислит расстояние для каждого из них, чтобы отфильтровать местоположения в углах, которые превышают 10 миль. </p>

Другой вариант - посмотретьв пространственное индексирование для SQLite .

1 голос
/ 17 августа 2011

Не можете ли вы сначала сузить набор данных, создав максимальную и минимальную длину и широту (скажем, в пределах 10 миль от текущего местоположения). Затем вы можете запросить набор данных по lat> minLat и lat

0 голосов
/ 17 августа 2011

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

SELECT * ИЗ таблицы t ГДЕ t.lat <(широта + бафф) И t.long <(лонг + бафф) И t.lat> (широта-бафф) И t.long> (длинно-бафф))

lat, long - ваше местоположение, бафф - некоторое значение, которое вы можете настроить в соответствии с потребностями своего приложения (например, 100 футов, 1 миля и т. Д.)

Затем вы можете запустить расчет расстояния навозвращенные записи.

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