【问题标题】:Find the current location using CLGeocoder Reverse Geocoding使用 CLGeocoder 反向地理编码查找当前位置
【发布时间】: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) 的吗?

标签: iphone ipad xcode4.5 cllocationmanager clgeocoder


【解决方案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 你不应该在CLLocationManagerDelegatemethod 中使用它。

附言

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 功能。希望对您有所帮助...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-02
    • 2012-08-30
    • 1970-01-01
    • 2012-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多