2010-12-27 1 views
4

У меня есть набор узлов, которые определяют улицы. Каждый узел имеет широту и долготу. Также у меня есть местоположение пользователя с широтой и долготой. Мое намерение состоит в том, чтобы построить диаграмму Вороного для сегментов, определяемых каждой парой узлов, а затем найти, какое местоположение узла узла ближе всего.Замена CGAL для iOS

Похоже, эта задача может быть выполнена с помощью библиотеки CGAL. Хотя я в процессе компиляции его для среды iOS, возможно, вы, ребята, сможете предоставить ссылки на libs, которые уже скомпилированы против iOS, или были предназначены для использования в среде Objective C с самого начала ...

Потому что я боюсь, что даже если CGAL скомпилируется для меня, я могу попасть в неприятности при использовании. Благодаря!

P. S. Также, возможно, у вас есть лучшее решение. Не стесняйтесь пишете его здесь.

ответ

3

Я никогда не использовал CGAL, поэтому я не могу прокомментировать, лучше ли мое решение.

Но я использовал библиотеку spatialite, чтобы сделать что-то подобное. Spatialite работает поверх sqlite. Когда вы используете его, лучше не использовать библиотеку sqlite, поставляемую с iPhone, а просто перекомпилировать все с нуля с включенным пространственным пространством. После того, как у вас есть данные в базе данных, вы можете использовать просто такие функции, как ST_Distance, чтобы найти закрывающие сегменты.

Spatialite использует R * -Trees для пространственной индексации. Поиск очень быстрый.

+0

Спасибо Том. Сейчас я изучаю эту библиотеку. Отметьте свой ответ как «Ответ», если это действительно подходит. Я надеюсь, что это произойдет, так как я точно храню данные узла в SQLite db. –

+0

Похоже, вы дали мне правильный вектор. Вот аналогичный вопрос и совет: http://stackoverflow.com/questions/4373730/is-there-an-offline-geocoding-framework-library-or-database-for-ios. Видел, что раньше, но для некоторых причина отфильтровывала это, поглощаясь алгоном Вороного. :) –

0

CGAL - это беспорядок (дизайн комитета и C++, всегда опасный), ИМХО. Трудно проникнуть.

Но, вам нужно рассчитать диаграмму Voronoi на устройстве? Если ваш набор данных - это уличные данные, это может не так сильно измениться, и вы можете предварительно создать его вне устройства.

И, наконец, диаграмма Вороного является мощной конструкцией, но здесь может быть излишним. Если вы хотите избежать большой библиотеки, достаточно простой эвристики: поместите точки вдоль ваших уличных сегментов. Учитывая местоположение пользователя, найдите ближайшую улицу (используя, скажем, kd-дерево - простую для реализации, быструю, много реализаций). Используйте те, чтобы протестировать набор кандидатов, чтобы найти ближайший.

+0

На самом деле то, что я сделал, скомпилировано Spatialite lib для iOS, а затем конвертировало мой MySQL db в один с столбцом геометрии и пространственным индексом и дайте lib сделать все остальное. –