Пространственный запрос с использованием базы данных SQLite на iPhone - PullRequest
1 голос
/ 05 января 2011

Я хочу разработать приложение для iPhone с использованием геолокации с использованием локально сохраненных пространственных данных.

Сложной частью такого приложения является ответ на запрос "Я хочу, чтобы х ближайших точек вокруг меня".Это потому, что данные должны быть упорядочены, а критерии упорядочения - это расстояние на сфере (да, земля не плоская ^^).Таким образом, эффективный алгоритм довольно сложен.

Пространственные данные хранятся локально в моем приложении (следовательно, используется sqlLite), поэтому я не могу использовать библиотеки, такие как MyGis или PostGis.На SqlLite я видел «SpatiaLite», но, кажется, его не очень удобно использовать с iPhone.

Кто-нибудь знает библиотеку, чтобы сделать это легко? ... или удобный способ выполнить эту задачу?

1 Ответ

1 голос
/ 05 января 2011

В вашем запросе SQL вам нужно вычислить расстояние между заданной точкой и каждой сохраненной точкой, упорядочить результаты по этому значению и вернуть первые x строк.

Вы не указываете, сколько данныхточки есть, или насколько они рассредоточены - если это большой набор данных, такой подход будет дорогостоящим, и вы захотите найти способы определения вероятного подмножества точек, прежде чем рассчитывать все расстояния, и / илиТехника кеширования / предварительного расчета, чтобы вы снова и снова не рассчитывали одну и ту же информацию для пользователя в одном и том же месте.Поскольку вы, по сути, будете запускать функцию для каждой строки данных, индексы использовать нельзя.

Существует множество полезных ссылок о том, как рассчитать расстояние между двумя точками, например:

http://www.mathopenref.com/coorddist.html

Сферическая природа Земли не окажет большого влияния на расстояния, если данные не будут особенно чувствительны к точности, но если это так, существуют другие факторы, такие как изменение высоты, которое такжевлияют на реальные расстояния.

...