5

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

我用谷歌搜索我的查询,我在这里这里得到了类似的问题。这个链接是说如果我用 wifi 或手机信号塔访问 CLLocation 它将为空。即使我尝试设置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。

4

2 回答 2

4

要回答您最初的问题:如果您在配置 CLLocationManager 时将 desiredAccuracy 设置为 Best 或 BestForNavigation,并将 distanceFilter 设置为 kCLDistanceFilterNone,则将始终使用 GPS。然后,您还将在 CLLocation 事件中获得高度值。

然而,GPS 需要很短的时间才能“锁定”到足够多的卫星以报告高度。在此期间,它将报告没有高度值的 CLLocation 事件。因此,您应该忽略前几个事件,直到verticalAccuracy 值对您来说足够好。另外,检查时间戳,因为有时第一个 CLLocation 事件是旧事件。

于 2012-05-23T14:27:20.467 回答
2

请参阅Android - 通过经度和纬度获取高度?有一个 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提供了海拔服务和文档

于 2012-05-17T06:21:11.983 回答