如何将多个地名转换为坐标?
Posted
技术标签:
【中文标题】如何将多个地名转换为坐标?【英文标题】:How to convert more than one place names into coordinates? 【发布时间】:2012-05-18 13:45:26 【问题描述】:我正在尝试使用以下代码将 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); ];
为了简化,我将一个地名转换了两次。当我运行代码时,只运行第一个地理编码完成处理程序。其余的地理编码完成处理程序将被忽略。
我想知道为什么会发生这种情况以及如何转换多个位置。
【问题讨论】:
【参考方案1】:请参阅 Apple 的指南: http://developer.apple.com/library/ios/#documentation/CoreLocation/Reference/CLGeocoder_class/Reference/Reference.html
应用程序应该意识到它们如何使用地理编码。这里是 有效使用此类的一些经验法则:
1) 最多为任何一项用户操作发送一个地理编码请求。
2) 如果用户执行多个涉及地理编码的操作 相同的位置,重用初始地理编码请求的结果 而不是为每个操作启动单独的请求。
3) 当你想自动更新用户的当前位置时 (例如当用户移动时),仅发出新的地理编码请求 当用户移动了相当长的距离并经过合理的 时间已经过去了。例如,在典型情况下,您 每分钟不应发送超过一个地理编码请求。
4) 不要在用户不愿意的时候启动地理编码请求 立即查看结果。例如,如果出现以下情况,请不要启动请求 您的应用程序处于非活动状态或在后台。
【讨论】:
【参考方案2】:您一次不应执行多个地理编码操作。该块是异步发生的,因此第二个地理编码操作可能会在第一个有机会完成之前开始。这是文档:
该方法将指定的位置数据异步提交给地理编码服务器并返回。您的完成处理程序块将在主线程上执行。发起正向地理编码请求后,请勿尝试发起另一个正向或反向地理编码请求。
【讨论】:
以上是关于如何将多个地名转换为坐标?的主要内容,如果未能解决你的问题,请参考以下文章