2012-05-17 2 views
4

내 응용 프로그램에서 내 위치의 고도를 얻으려고합니다. 하지만 때마다 CLLocation 개체의 altitude 속성을 시도 할 때 나는 결과로 0.00을 얻고 있습니다.iPhone SDK의 내 위치 고도 (해발 고도)를

내 질문에 Google 검색하고 비슷한 질문이 herehere 있어요. 이 링크는 Wi-Fi 또는 셀 타워로 CLLocation에 액세스하면 null이 될 것이라고 말합니다. 심지어 desireAccuracy을 설정하려고해도 앱이 GPS를 사용하는지 확인하지 않아도됩니다. 실내에 있다면 GPS에 접속할 수 없다는 것입니다.

나는 많은 경우 앱이 GPS 만 사용할 것인지 확신하지 못합니다. 나는 wifi 또는 셀 타워에서 고도를 얻는 것을위한 어떤 방법을 원한다. 그것을 위해 나는 더 많은 googled와 나는 Google Earth API을 가지고있다. 그러나 나는 이것이 마이크로 소프트 .net 기술만을 위해있다라고 생각한다.

이제이 상황에 따라 Microsoft 기술에서 웹 서비스를 만들고 거기에 내 위치를 전달할 수있는 해결책이 있다고 생각하며 고도를 응답으로받을 수는 있지만이를 원하지는 않습니다.

누구나 내 위치의 고도를 어떻게 얻을 수 있는지 제안 할 수 있습니까? 사용할 수있는 방법이 있습니까? 그렇다면 올바른 방향으로 나를 이동하십시오. 사전에

감사합니다.

EDIT1

나는 위치를 업데이트 CLLocationManager을 사용하고 내 위치를 얻을 때 나는 고도를해야합니다.

Edit2가

는 @ fishinear의 대답에 따라 나는 다음 코드를 시도 :

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    manager = [[CLLocationManager alloc] init]; 
    [manager setDesiredAccuracy:kCLLocationAccuracyBestForNavigation]; 
    [manager setDistanceFilter:kCLDistanceFilterNone]; 
    [manager setDelegate:self]; 
    [manager startUpdatingLocation]; 
// Do any additional setup after loading the view, typically from a nib. 
} 

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation { 
    if ([newLocation verticalAccuracy] >= 0) { 
     NSLog(@"Altitude = %lf",newLocation.altitude); 
    } 
    NSLog(@"Vertical Accuracy : %lf",newLocation.verticalAccuracy); 
} 

verticalAccuracy 항상 -1입니다. 지난 30 분 동안 앱을 실행 한 후에도 변경되지 않습니다. 내 3GS에서 4.3.2를 실행 중입니다. 나는이 코드를 사용하여 GPS에 액세스하지 않는다고 생각하므로 실내입니다.

답변

0

Android - Get Altitude By Longitude and Latitude?을 참조하십시오. Android 솔루션이 있지만 iOS에 쉽게 적용 할 수 있습니다.

http://gisdata.usgs.gov/xmlwebservices2/elevation_service.asmx/getElevation?X_Value=" + 
      String.valueOf(longitude) + 
      "&Y_Value=" + String.valueOf(latitude)    
      + "&Elevation_Units=METERS&Source_Layer=-1&Elevation_Only=true"; 

그런 다음 <double>...</double>을 사이에서 응답 텍스트를 구문 분석 할 수

대답은 기본적으로 당신은 단지에 HTML 웹 요청을 보내,이 상부 대답부터 USGS Elevation Query Web Service

을 사용하는 것입니다 태그

편집 : 미국 이외의 지역에서 고도를 얻으려고하는 것처럼 보입니다. CLLocationManager를 구성 할 때 kCLDistanceFilterNone에 최상 또는 BestForNavigation 및 distanceFilter에 desiredAccuracy를 설정하면 GPS가 항상 사용됩니다

Google지도 API는 원래의 질문에 대답하기 https://developers.google.com/maps/documentation/javascript/elevation

+0

이 URL을 사용해 보았는데 x 및 y 값을 각각 '22.998851594142938' 및'72.5317382812553173828125 '로 전달했으며 응답은'-1.79769313486231E + 308'입니다. 이걸 내가 어떻게 이해하니? 이걸로 높이를 얻는 방법? 덕분에 –

+0

. 귀하의 수정 된 답변이 도움이되었습니다. https://developers.google.com/maps/documentation/javascript/elevation 이것이 내가 찾고있는 것입니다. –

4

에서 고도 서비스와 문서를 제공한다.그런 다음 CLLocation 이벤트에서 고도 값을 가져옵니다.

그러나 GPS가 고도를보고하기에 충분한 위성에 "고정"되기까지 시간이 걸립니다. 이 시간 동안 고도 값이없는 CLLocation 이벤트가보고됩니다. 따라서 verticalAccuracy 값이 충분할 때까지 첫 번째 몇 가지 이벤트는 무시해야합니다. 또한 때때로 첫 번째 CLLocation 이벤트가 이전 이벤트이기 때문에 타임 스탬프를 확인하십시오.

+0

그러나 내가 말한대로 몇 가지 값 중에서 어느 고도 값이 정확한지 확인하는 방법은 무엇입니까 ?? –

+0

CLLocation의 verticalAccuracy 필드를 확인하십시오. 이는 고도 값의 정확도를 나타내며 고도가 결정되지 않으면 음수입니다. – fishinear

+0

문제의 'edit2'를 확인하십시오. 귀하의 제안을 구현했지만 작동하지 않았습니다. –