我正在尝试在我的应用程序中获取我的位置的高度。但是每次我尝试altitude对象的CLLocation属性时,都会得到0.00作为结果。

我用谷歌搜索查询,然后遇到类似的问题herehere。该链接表示,如果我使用wifi或手机信号塔访问CLLocation,它将为null。即使我尝试将desireAccuracy设置为最佳设置,也不要确保该应用程序将使用GPS。也就是说,如果我在室内,将无法访问GPS。

在很多情况下,我不确定该应用程序是否只会使用GPS。我也想要一些从wifi或手机发射塔获取海拔的方法。为此,我在Google上搜索更多,得到了Google Earth API,但我认为这仅适用于Microsoft .net技术。

现在,根据这种情况,我认为对于解决方案,我可以在Microsoft Technology中创建一个Web服务并将其传递到该位置,并且可以获取海拔高度作为响应,但是我不想这样做。

谁能建议我如何从ios获取我所在位置的海拔高度。有没有可用的方法?如果可以,请按照正确的方向导航。

提前致谢。

编辑1

我使用CLLocationManager更新位置,当我获得位置时,我需要海拔高度。

编辑2

根据@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。

最佳答案

看到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>标签之间解析出响应文本

编辑:
看来您可能正在尝试使美国境外的海拔升高。

Google Maps API的https://developers.google.com/maps/documentation/javascript/elevation确实提供了海拔服务和文档

10-07 22:48