【问题标题】:Altitude is always zero on iPhone simulatoriPhone模拟器上的高度始终为零
【发布时间】:2023-11-06 12:11:01
【问题描述】:

我正在尝试在 Xcode 和 Simulator 上开发一个高度计,但对于海平面以上的高度,它总是返回 0。 我不明白为什么,我在模拟器上尝试了很多地方。

我的代码是这样的:

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    _mapView.delegate = self;
    _locationManager = [[CLLocationManager alloc] init];
    _locationManager.desiredAccuracy = kCLLocationAccuracyBest;
    _locationManager.pausesLocationUpdatesAutomatically = YES;
    _locationManager.delegate = self;

    firstLocation = YES;
   checkUserLocation = NO;
}

- (void) locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations{
CLLocation *location = [locations lastObject];
lastLocation = location.coordinate;
_latitudeLabel.text = [NSString stringWithFormat:@"Current latitude: %f", location.coordinate.latitude];
_longitudeLabel.text = [NSString stringWithFormat:@"Current longitude: %f", location.coordinate.longitude];
_altitudeLabel.text = [NSString stringWithFormat:@"Current altitude: %f m", location.altitude];
}

我的错误在哪里?

【问题讨论】:

    标签: ios cocoa-touch gps ios-simulator cllocationmanager


    【解决方案1】:

    您的代码没有问题,因为您使用的是模拟器。

    确定高度需要具有 GPS 功能的设备,并且您还需要在该设备上使用 GPS 才能获得它(即使在支持 GPS 的设备上,仅 wifi 的位置也不会正确报告高度)。 iOS 模拟器没有这些功能,因此那里的高度不准确。您需要使用带 GPS 的真实设备来测量海拔高度。

    如果您想模拟具有高度的 CLLocation,您可以创建您的 CLLocation 对象并自己传递一个高度:

    - (id)initWithCoordinate:(CLLocationCoordinate2D)coordinate
        altitude:(CLLocationDistance)altitude
        horizontalAccuracy:(CLLocationAccuracy)hAccuracy
        verticalAccuracy:(CLLocationAccuracy)vAccuracy
        timestamp:(NSDate *)timestamp
    

    Altitude 是一个只读属性,因此当您在委托回调中收到 CLLocation 对象时,您需要自己创建一个新的 CLLocation 对象,而不是手动更改它。

    【讨论】: