簡體   English   中英

在iphone SDK中獲取我所在位置的海拔高度(海平面高度)

[英]Getting Altitude(height from sea level) of my location in iphone SDK

我想在我的應用程序中獲取我的位置的海拔高度。 但每次我嘗試CLLocation對象的altitude屬性時,我得到0.00作為結果。

我搜索了我的查詢,我在這里這里得到了一個類似的問題。 這個鏈接說如果我使用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。

要回答您的原始問題:如果您在配置CLLocationManager時將desiredAccuracy設置為Best或BestForNavigation,並將distanceFilter設置為kCLDistanceFilterNone,則將始終使用GPS。 然后,您還將在CLLocation事件中獲取高度值。

然而,在GPS已經“鎖定”到足夠的衛星以便能夠報告高度之前需要一段時間。 在此期間,它將報告沒有高度值的CLLocation事件。 因此,您應該忽略前幾個事件,直到verticalAccuracy值足夠好。 另外,檢查時間戳,因為有時第一個CLLocation事件是舊事件。

查看Android - 按經度和緯度獲取海拔高度? 有一個Android解決方案,但它很容易適應iOS。

答案是使用USGS Elevation Query Web服務

從那里的頂部答案,基本上你只是發送一個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>標記之間的響應文本

編輯:看起來你可能想要在美國境外升華。

Google Maps API確實提供了Elevation服務和文檔, 網址https://developers.google.com/maps/documentation/javascript/elevation

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM