使用 CLGeocoder 反向地理编码查找当前位置
Posted
技术标签:
【中文标题】使用 CLGeocoder 反向地理编码查找当前位置【英文标题】:Find the current location using CLGeocoder Reverse Geocoding 【发布时间】:2013-03-15 06:30:45 【问题描述】:我想根据经纬度找到用户的当前位置。以前我已经使用 MKReverseGeocoder 完成了它,但由于它在 ios5 中已被弃用,我使用 CLGeocoder。但无法获取当前位置。
- (void)viewDidLoad
locationManager = [[CLLocationManager alloc] init];
[locationManager setDelegate:self];
[locationManager setDistanceFilter:kCLDistanceFilterNone];
[locationManager setDesiredAccuracy:kCLLocationAccuracyBest];
[locationManager startUpdatingLocation];
- (void)locationManager:(CLLocationManager *)manager
didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
CLLocation *currentLocation = newLocation;
locationLabelOne=newLocation.coordinate.latitude;
locationLabelTwo=newLocation.coordinate.longitude;
geocoder = [[CLGeocoder alloc] init];
[locationManager stopUpdatingLocation];
[geocoder reverseGeocodeLocation:currentLocation completionHandler:^(NSArray *placemarks, NSError *error)
NSLog(@"Found placemarks: %@, error: %@", placemarks, error);
if (error == nil && [placemarks count] > 0)
placemark = [placemarks lastObject];
NSString *get = [NSString stringWithFormat:@"%@ %@\n%@ %@\n%@\n%@",
placemark.subThoroughfare, placemark.thoroughfare,
placemark.postalCode, placemark.locality,
placemark.administrativeArea,
placemark.country];
else
NSLog(@"%@", error.debugDescription);
];
NSLog(@"%@",placemark);
当我 NSLog 地标返回 null。我哪里出错了?
【问题讨论】:
尝试在CLLocation *currentLocation = newLocation;
之后记录 currentLocation 以检查值是否已设置。您还可以调试每一行以查看值是否设置正确。
locationManager:didUpdateToLocation:fromLocation
已弃用 iOS 6.0,您应该改用 locationManager:didUpdateLocations:
。
是的,当我记录当前位置时,我得到这个: +/- 5.00m(速度 -1.00 mps / course -1.00)@ 3/15/13,12:33: 00 PM 印度标准时间
@rohan-patel 你能告诉我现在如何在这个中传递纬度和经度吗:?
是的。我想弄清楚。但首先你能告诉我你是如何在 NSlog 中提高速度(speed -1.00 mps / course -1.00)
的吗?
【参考方案1】:
可能的问题:
1) locationManager:didUpdateToLocation:fromLocation
已弃用 iOS 6.0,您应该改用 locationManager:didUpdateLocations:
。
- (void)locationManager:(CLLocationManager *)manager
didUpdateLocations:(NSArray *)locations
currentLocation=[locations lastObject];
// rest code will be same
2) [locationManager stopUpdatingLocation];
听起来也很可疑。 IMO 你不应该在CLLocationManagerDelegate
method 中使用它。
附言
i) 有关正向/反向地理编码的更多详细信息,您可以查看 Apple 的示例代码 GeocoderDemo
ii) 如果您使用 Google API 进行反向地理编码,它将拥有多年来可用的所有数据,但 CLGeocoder
将没有完整的数据,例如街道名称、印度等国家的密码。发生的情况是,当您执行反向地理编码请求时,您将坐标传递给核心位置,核心位置在后台连接到 Web 服务(开发人员不会知道)并返回一个用户可读的地址。因此,此网络服务可能无法像 GOOGLE API 那样返回准确的数据。
【讨论】:
嘿,我现在发现这个错误:Error Domain=kCLErrorDomain Code=8 "操作无法完成。(kCLErrorDomain error 8.)" 我该怎么办? 你在设备上试过了吗?尝试获取placemark.country
看看会发生什么。
嘿,我已经放置了另一个代码,它似乎可以工作。我正在使用这个 CLGeocoder 来显示从当前位置到目标地址的方向,我正在使用 GOogle API。我想知道 CLGeocoder 是否总是在所有情况下都返回 Street,City,State,Zip。因为我需要使用所有这些来显示方向...你能告诉我这一点吗..【参考方案2】:
我遇到了同样的问题,然后通过一些实验我解决了我的问题......
确保: -90
它似乎没有执行基本的 mod 功能。希望对您有所帮助...
【讨论】:
以上是关于使用 CLGeocoder 反向地理编码查找当前位置的主要内容,如果未能解决你的问题,请参考以下文章
CLGeocoder 反向地理编码位置。第一次在 [placemarks count = 0]?
对用于反向地理编码位置的 CLGeocoder 类方法感到困惑