0

我正在编写一个使用 GPS 的应用程序。我可以成功获取纬度、经度和其他属性,但高度似乎总是返回“0.00”我有以下代码以最简单的方式对其进行测试,仍然得到 0.00。下面的代码:

-(void)locationManager:(CLLocationManager *)manager
didUpdateToLocation:(CLLocation *)newLocation
       fromLocation:(CLLocation *)oldLocation
{


// Stop updating location if renewed in less than 60 seconds
    if ([self timeBetweenLocationandNow] < 60)
{
    [locationManager stopUpdatingLocation]; 
    NSLog(@"GPS Stopped");
}


NSLog(@"Altitude:%.2f m",newLocation.altitude);
}

关于什么可能是错的任何想法?同样在初始化方法上,我有以下内容:

- (id)init
{
self = [super init];

if (self != nil)
{
    // Create location manager Object
    locationManager = [[CLLocationManager alloc] init];
    // Set the delegate to this object
    [locationManager setDelegate:self];
    // Set distance filter and accuracy 
    [locationManager setDesiredAccuracy:kCLLocationAccuracyBest];
    [locationManager startUpdatingLocation];
 }

return self;
}

将欣赏任何见解。谢谢你

4

2 回答 2

0

我发现了问题。正如 Deepmist 建议的那样,必须多次调用代表。我在第一次修复后停止了 GPS。这为我提供了准确的坐标数据,但高度保持在 @ 0.00 直到像 3 个左右的代表呼叫。现在我得到了高度数据,有什么好的方法来检查这个?这样我可以在获取数据后停止位置管理器吗?我可以检查高度是一个非零值,但想知道是否应该使用其他属性来确保您具有尽可能高的准确性,从而使您的所有位置数据都有效(即某些属性上的非零值)。谢谢你

于 2011-04-03T15:54:02.617 回答
0

我不是专家,但这就是我的理解:iPhone 与其他 gps 系统完全不同,因为它可以通过多种方式确定您的位置。iPhone 通过三种方式确定位置:本地 wifi 信号、手机信号塔和/或 gps 芯片。使用 GPS 卫星定位可能会非常缓慢,并且在人口稠密的城市中几乎不存在接收信号。因此,iPhone 通常会优先考虑前 2 个选项。

Wifi 定位数据来自在街道上行驶的人们记录热点,这显然不会给出高度的提示。我不确定蜂窝塔三角测量是否提供任何高度数据,但我的猜测是否定的。与 gps 相比,这两种方法非常快,但如您所见,会产生 0 的高度。如果你在一个 GPS 卫星接收良好的地方,iPhone 可能会为你提供高度,但即便如此,它甚至可能在它接收到几次卫星信号并多次呼叫位置代表之前都找不到它,即便如此,gps 的高度数据也可能是出了名的不准确。

长话短说,依靠 iPhone 提供的准确高度数据是个坏主意。

于 2011-04-03T08:40:45.967 回答