CLLocationDegrees 返回 0 尽管它有一个值

Posted

技术标签:

【中文标题】CLLocationDegrees 返回 0 尽管它有一个值【英文标题】:CLLocationDegrees returns 0 although it has a value 【发布时间】:2011-03-25 09:23:35 【问题描述】:

我有一个包含 CLLocationCoordinate2D 的类。 我通过网络请求从网络获取纬度和经度。

当我使用 CLLocationCoordinate2D 对象在地图上放置对象 (MKMapView) 时,一切正常。

但是,当我尝试将 CLLocationCoordinate2D 的纬度或经度 (CLLocationDegrees) 与其他变量进行比较或将其放入字符串中时,我总是得到 0(零),尽管它的值是正确的 (35.0333..,等等)

例如:

item.coordinate.latitude 是 32.816326141357422

(在调试时将光标放在项目上时显示,在地图上放置对象时也正确)

NSLog(@"lat: %f", item.coordinate.latitude); => 这个输出“lat: 0”

NSString* lats = [[NSNumber numberWithDouble:item.coordinate.latitude] stringValue]; => 这个 lats 变为“0”。

有谁知道如何解决这个问题? 谢谢。

【问题讨论】:

如果您发布实际代码,则更容易发现错误所在。 您是否对您的 url 请求进行了编码? 【参考方案1】:

代替

NSLog(@"lat: %f", item.coordinate.latitude);

尝试:

NSLog(@"lat: %+.6f", item.coordinate.latitude);

我使用类似于以下的东西:

if (![[NSString stringWithFormat:@"%+.6f,%+.6f", locationManager.location.coordinate.latitude, locationManager.location.coordinate.longitude] isEqualToString:@"+0.000000,+0.000000"])

    // do cool stuff

另外,请确保您已为您的 CLLocationManager 设置委托和委托方法:

- (void)viewDidLoad

    [super viewDidLoad];
    locationManager = [[CLLocationManager alloc] init];
    [locationManager setDelegate:self];
    [locationManager setDesiredAccuracy:kCLLocationAccuracyBest];
    [locationManager setDistanceFilter:kCLDistanceFilterNone];
    if (locationManager.locationServicesEnabled)
        [locationManager startUpdatingLocation];


#pragma mark -
#pragma mark CLLocationManager Delegate Methods

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

    NSDate* eventDate = newLocation.timestamp;
    NSTimeInterval howRecent = [eventDate timeIntervalSinceNow];
    if (abs(howRecent) < 15.0)
    
        NSLog(@"New Latitude %+.6f, Longitude %+.6f", newLocation.coordinate.latitude, newLocation.coordinate.longitude);
    

【讨论】:

@taxman 事实证明纬度和经度也可以针对浮点数进行测试...: if (fabsf(locationManager.location.coordinate.latitude) > 0.0) ... if (fabsf( locationManager.location.coordinate.longitude) > 0.0) ...

以上是关于CLLocationDegrees 返回 0 尽管它有一个值的主要内容,如果未能解决你的问题,请参考以下文章

将 Double 转换为 CLLocationDegrees [SWIFT]

将“NSNumber *__strong”发送到不兼容类型“CLLocationDegrees”(又名“double”)的参数

扮演双重角色?

如何修复:无法将“CLLocationDegrees”(又名“Double”)类型的值分配给“Float!”在斯威夫特 3

如何将字符串转换为 CLLocationDegrees Swift 2

尽管在 openCV 4.0.0 中正确寻址,imread() 仍然返回空垫