2012-05-17 111 views
4

我正在嘗試在我的應用程序中獲取我的位置的海拔高度。但每次我嘗試altitudeCLLocation對象的屬性,我得到0.00作爲結果。在iPhone SDK中獲取我的位置的海拔高度(海拔高度)

我爲我的查詢搜索了一下,我收到了類似的問題herehere。這個鏈接是說,如果我使用wifi或手機信號塔訪問CLLocation,它將爲空。即使我試圖設置desireAccuracy最好,即使它不確定該應用程序將使用GPS。這也是說,如果我在室內,我將無法訪問GPS。

我很多情況下它不確定應用程序將只使用GPS。我想要一些從wifi或手機塔獲取高度的方法。爲此,我搜索了更多,我得到Google Earth API,但我認爲這僅適用於Microsoft .net技術。

現在根據這種情況,我認爲對於一個解決方案,我可以在Microsoft技術中創建一個Web服務,並將我的位置傳遞到那裏,我可以獲得高度作爲響應,但我不想這樣做。

任何人都可以建議我如何從ios獲取我的位置的高度。有沒有方法可用?如果是,請在正確的方向導航我。

在此先感謝。

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上運行ios 4.3.2。我在室內,所以我認爲它甚至不使用此代碼訪問GPS。

回答

0

請參閱Android - Get Altitude By Longitude and Latitude?有一個Android解決方案,但它很容易適應iOS。

答案是使用USGS Elevation Query Web Service

從頂部的答案,基本上你只需發送一個HTML的Web請求:

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>之間解析出響應文本標籤

編輯: 它看起來像你可能試圖讓海拔在美國之外。

谷歌地圖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

提供海拔服務和文檔要回答你原來的問題: GPS將始終使用,如果你配置CLLocationManager時設置desiredAccuracy爲最佳或BestForNavigation,並distanceFilter到kCLDistanceFilterNone。然後您將在CLLocation事件中獲取高度值。

但是,在GPS已經「鎖定」到足夠的衛星能夠報告高度之前需要一段時間。在此期間,它將報告沒有高度值的CLLocation事件。因此,您應該忽略第一對事件,直到verticalAccuracy值足夠好爲止。另外,請檢查時間戳,因爲有時第一個CLLocation事件是舊的。

+0

但是,我怎麼能確定哪些高度值在你說的幾個值中是正確的? –

+0

檢查CLLocation中的verticalAccuracy字段。這表示高度值的精確度,如果高度未確定,則爲負值。 – fishinear

+0

檢查我的'edit2'問題。我實施了你的建議,但沒有奏效。 –