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