2009-11-23 2 views
1

관심 장소 (POI) 목록이 패키지로 제공되어 오프라인으로 작동하는 위치 인식 iPhone 앱을 만드는 방법을 고려 중입니다. 앱은 사용자의 현재 위치를 CoreLocation에서 읽고 사용자의 현재 위치에 근접한 순서대로 POI 목록을 만듭니다.iPhone 용 지형 공간 라이브러리

이 응용 프로그램을 실행하려면 두 가지 기본 지리 공간 기능이 필요합니다. 첫 번째는 점 (사용자의 현재 위치)이 특정 지리 공간 경계 내에 있는지 테스트하는 함수입니다. 두 번째는 두 위도/경도 점 사이의 거리를 나에게 줄 수있는 함수입니다. 두 번째 함수를 사용하여 사용자의 현재 위치에 근접하여 POI 목록을 정렬합니다.

본인은이 문제 영역이 잘 여행되고 있으며 오픈 소스 옵션이 있음을 알고 있습니다. 최고의 후보 (내가 알고있는)는 GEOS C++ 라이브러리입니다. 내가 이것을 사용하는 것이 상상하는 방법은 정적 라이브러리로 GEOS를 컴파일하는 것입니다

내 질문은 (그리고 당신이 three20 라이브러리를 포함하는 것처럼, 프로젝트 종속성으로 연결.) :

  1. 무엇 내 응용 프로그램에 필요한 두 가지 기능을 얻는 가장 좋은 방법입니다.

  2. 질문 1에 가장 적합한 대답은 GEOS를 정적 라이브러리로 컴파일하고 내 프로젝트에 연결하는 경우이 작업을 수행 한 사람이 일부 포인터를 제공 할 수 있습니까? 저는 컴파일, 정적 라이브러리 구축 등의 초보자입니다. GEOS를 컴파일하고 프로젝트 예제에 포함시키는 방법에 대한 예제 코드 나 튜토리얼을보고 싶습니다.

+0

+1 아이폰 용 GEOS 컴파일 결과로 생성 된 정적 라이브러리. 이 일을 성취하셨습니까? 나는 현재 아이폰에서 작업하는 spatialite를 얻으려고 노력 중이다. GEOS는 일부 기능을 위해 재구성 될 수있다.따라서 GEOS 부분에 대한 귀하의 발전에 관심이 있습니다. 귀하의 의견에 감사드립니다. – yonel

+0

'CLLocation'의'getDistanceFrom :'이 내게 잘 맞았지만 GEOS를 정적 라이브러리로 컴파일하는 것을 추구하지 않았습니다. – Prairiedogg

답변

1

점 사이의 거리, CLLocationgetDistanceFrom: 방법 참조.

지형 공간 경계가 무슨 뜻인지 잘 모르겠지만 위치를 정의하는 직사각형이있는 경우이를 CGRect으로 변환하고 모든 점의 위도와 경도를 90과 180만큼 오프셋 할 수 있습니다 각각 음수가 없는지 확인하려면 CLLocation 개체를 CGPoint으로 변환 한 다음 CGRectContainsPoint을 사용하여 해당 직사각형 내에 위치하는지 확인합니다.

설명 된 모든 기능은 표준 iPhone SDK의 일부입니다.

+0

지형 공간 경계가 의미하는 것은 어떤 종류의 지오메트리 (어쩌면 구형 또는 지구 모델 등으로 투영 된 다각형) 일 수 있습니다. 내 유스 케이스의 경우 (위도/경도가 특정 도시에 속하는지 여부를 결정할 때) 도시 외곽을 덮는 직사각형은 정상적으로 작동합니다. – Prairiedogg

+0

이 경우 데이터를 제일 먼저 얻는 것이 가장 어려운 부분입니다. 원하는 정확도에 따라 Geonames.org를 사용하여 도시의 중심을 찾을 수 있습니다. 그런 다음 자신의 지점이 15 마일 이내에 있는지 알아보십시오. – iKenndac

3

좋아, 시간이 좀 걸렸지 만 지금은 아이폰 용 정적 라이브러리 또는 GEOS (시뮬레이터와 실제 장치 모두 x86과 ARM)를 빌드 할 수 있다고 생각합니다. libgeos.alibgeos_c.a : 구현 및 그것의 api. http://bit.ly/aTKsI6

(다른 바이너리가있다, 나머지는 spatialite입니다)

:

당신은 거기 binaires를 얻을 수 은 (GEOS 버전 3.1.1, 이것은 매우 마지막되지 않습니다)

대부분의 작업은 크로스 컴파일이 .sh 개의 스크립트를 통해 이루어지는 방식을 이해함으로써 이루어졌습니다. 이 블로그는 반드시 확인해야합니다 : http://robertcarlsen.net/2009/07/15/cross-compiling-for-iphone-dev-884

+0

바이너리 공유에 큰 감사드립니다. 다음은 서로 다른 아키텍처의 여러 * .a 파일을 하나의 유니버설 바이너리로 결합하는 도구 BTW의 방법입니다. http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man1/lipo.1. html –

+0

GEOS는 LGPL에 속하므로이 방법으로 앱을 배포하면 라이선스에 위배 될 수 있습니다. http://osgeo-org.1803224.n2.nabble.com/licensing-when-doing-a-static-link-of-GEOS-in-iOS-td6289131.html을 참조하십시오. –