2010-12-27 5 views
4

거리를 정의하는 일련의 노드가 있습니다. 각 노드에는 위도와 경도가 있습니다. 또한 위도와 경도가있는 사용자 위치가 있습니다. 내 의도는 노드의 각 쌍에 의해 정의 된 세그먼트에 대한 보로 노이 다이어그램을 작성한 다음 가장 가까운 노드 사용자 위치를 찾는 것입니다.iOS 용 CGAL 대체

이 작업은 CGAL 라이브러리로 수행 할 수 있습니다. 내가 iOS 환경을 위해 컴파일하는 동안, 아마도 여러분들은 이미 iOS에 대해 컴파일 된 libs에 대한 링크를 줄 수있을 것이며, 처음부터 Objective C 환경에서 사용하도록 의도 된 것입니다 ...

CGAL이 컴파일 되어도 사용하기가 어려울 수 있습니다. 감사!

P. S. 아마도 당신은 더 나은 해결책을 가지고있을 것입니다. 여기 우리의 철자를 자유롭게 말해주십시오.

답변

3

나는 결코 CGAL을 사용하지 않았기 때문에 내 솔루션이 더 나은지 여부에 대해서는 언급 할 수 없습니다.

하지만 비슷한 것을하기 위해 spatialite 라이브러리를 사용했습니다. Spatialite는 sqlite를 기반으로 실행됩니다. 그것을 사용할 때 iPhone과 함께 제공되는 sqlite 라이브러리를 사용하지 않는 것이 좋지만 처음부터 spatialite가 포함 된 모든 것을 다시 컴파일하십시오. 일단 데이터베이스에 데이터가 있으면 ST_Distance와 같은 단순한 함수를 사용하여 클로즈 세그먼트를 찾을 수 있습니다.

Spatialite는 공간 색인을 위해 R * -Trees를 사용합니다. 조회는 매우 빠릅니다.

+0

감사합니다. Tom. 나는이 도서관을 연구 중이다. 그 답이 맞다면 답을 '답'으로 표시 할 것입니다. 내가 정확히 SQLite DB에 노드 데이터를 보관하고 있기 때문에 기대하고있다. –

+0

나에게 적절한 벡터를 준 것처럼 보입니다. 다음은 비슷한 질문과 조언입니다. http://stackoverflow.com/questions/4373730/is-there-an-offline-geocoding-framework-library-or-database-for-ios 이전에 보았지만 이유는 Voronoi algo에 흡수되어 필터링되었습니다. :) –

0

CGAL은 엉망입니다 (위원회 디자인과 C++, 항상 위험합니다), IMHO. 침투하기가 어렵습니다.

하지만 Voronoi 다이어그램을 디바이스에서 계산해야합니까? 데이터 세트가 거리 데이터 인 경우 변경 사항이 많지 않을 수 있으며 사전에 오프 디바이스로 구축 할 수 있습니다.

마지막으로, 보로 노이 다이어그램은 강력한 구조이지만 여기에서는 과도 할 수 있습니다. 큰 라이브러리를 포함시키지 않으려면 간단한 휴리스틱으로 충분할 수 있습니다. 거리 세그먼트에 포인트를 배치하십시오. 사용자의 위치가 주어지면 가장 가까운 거리 지점을 찾습니다 (예 : kd-tree 사용 - 구현이 간단하고 빠르며 많은 구현이 가능함). 그것들을 사용하여 세그먼트의 후보 세트를 테스트하여 가장 가까운 것을 찾으십시오.

+0

실제로 내가 한 것은 iOS 용 Spatialite lib를 컴파일 한 다음 기하학 열과 공간 인덱스가있는 MySQL 데이터베이스로 변환하고 나머지는 lib를 처리하게합니다. –