1

我正在尝试使用以下代码将地理编码 2 地名转发到坐标中:

CLGeocoder *geocoder = [[CLGeocoder alloc] init];

[geocoder geocodeAddressString:place 
                      inRegion:nil 
             completionHandler:^(NSArray* placemarks, NSError* error){
                 NSLog(@"a");
                 NSLog(@"count %d", [placemarks count]);
                 for (CLPlacemark* aPlacemark in placemarks) {
                     CLLocationCoordinate2D coord = aPlacemark.location.coordinate;

                     NSLog(@"%f, %f", coord.latitude, coord.longitude);
                 }
             }];

[geocoder geocodeAddressString:place 
                      inRegion:nil 
             completionHandler:^(NSArray* placemarks, NSError* error){
                 NSLog(@"b");
                 NSLog(@"count %d", [placemarks count]);
                 for (CLPlacemark* aPlacemark in placemarks) {
                     CLLocationCoordinate2D coord = aPlacemark.location.coordinate;

                     NSLog(@"%f, %f", coord.latitude, coord.longitude);
                 }
             }];

为了简化,我将一个地名转换了两次。当我运行代码时,只运行第一个地理编码完成处理程序。其余的地理编码完成处理程序将被忽略。

我想知道为什么会发生这种情况以及如何转换多个地方。

4

2 回答 2

1

您一次不应执行多个地理编码操作。该块是异步发生的,因此第二个地理编码操作可能会在第一个有机会完成之前开始。这是文档:

该方法将指定的位置数据异步提交给地理编码服务器并返回。您的完成处理程序块将在主线程上执行。发起正向地理编码请求后,不要尝试发起另一个正向或反向地理编码请求。

于 2012-05-18T13:51:24.957 回答
1

请参阅 Apple 的指南:http: //developer.apple.com/library/ios/#documentation/CoreLocation/Reference/CLGeocoder_class/Reference/Reference.html

应用程序应该意识到它们如何使用地理编码。以下是有效使用此类的一些经验法则:

1) 最多为任何一个用户操作发送一个地理编码请求。

2) 如果用户执行涉及对同一位置进行地理编码的多个操作,请重用来自初始地理编码请求的结果,而不是为每个操作启动单独的请求。

3) When you want to update the user’s current location automatically (such as when the user is moving), issue new geocoding requests only when the user has moved a significant distance and after a reasonable amount of time has passed. For example, in a typical situation, you should not send more than one geocoding request per minute.

4) Do not start a geocoding request at a time when the user will not see the results immediately. For example, do not start a request if your application is inactive or in the background.

于 2012-05-18T13:53:38.880 回答