2013-03-21 108 views
1

我读过iOS一次将应用程序限制为大约50个地址解析请求。如果我有大套,也许200?有什么方法可以一次对超过50组进行地理编码?例如,使用集合之间的延迟,每个集合限制为50.什么是延迟集合之间地理编码的理想方式?如何一次对一组200个地址进行地理编码

我见过NSProgrammer的回答以下问题:

iPhone iOS5 CLGeocoder how to geocode a large (200) set of addresses?

对于他提到的那种延迟的任何建议?这个延迟会在处理程序中并在另一个线程上运行吗?

for(int i = 0; i < [myArray count]; i++){ 

[call geoCoderMethod]; 
} 


-geoCoderMethod{ 
    [geocoder geocodeAddressString:addressString completionHandler:^(NSArray *placemarks, NSError *error) { 

    getCo-ordinates; 
    add annotation to mapview; 
} 

我试图分裂阵列成每25项块和调用geoCoderMethod和诱导使用performSelector方法的延迟。但performSelector方法和geoCoder似乎在不同的线程中运行,我不能导致方法调用之间的延迟。

回答

0

我有一个地址集合,我需要将它们转换为坐标。我所做的就是将收藏分成最多40个联系人的大块(您可能会增加到50个,但不会超过一分钟)。因此,一个有超过40个联系人的组织必须有一个延迟,以便在mapview加载之前处理所有地址并转换为坐标。

我需要根据用户需求加载mapview。在我的情况下,无论组中的联系人列表如何,都可以再次加载mapview并获得增益,而不考虑时间因素。 如果用户打算加载mapview并在1分钟内重新加载它,我需要为此开发一个逻辑。为此我决定保存mapview的状态,如果用户决定在1分钟之内重新加载同一组地址。

但是,如果用户决定加载另一组联系人,那么我必须根据要加载的联系人组重新考虑我的逻辑。所以我必须跟踪哪个组被加载(前一个或新的组),该组的联系人数量是否超过40。我不得不照顾的另一个重要因素是时间。为此,我有一个静态的NSDate变量,它始终跟踪CLGeocoder上次工作时的“时间”,并且如果当前时间(当CLGeocoder即将使用时)没有得到1分钟的差异,则我不得不推迟加载地图。

这是我使用CLGeocoder的坐标来实现mapView所做的工作。我相信这个逻辑可以在很大程度上进行优化,并且输出会更快。 如果有人提出更好的实现,将不胜感激。

0

这里完整的解决方案取决于你的逻辑。您可以使用可变数组来存储所有200个地址,并运行“for循环”以将发送请求限制为小于50,如20或30取决于您的地址数组的数量。如果你有200个地址,那么用你的限制来决定这个“for循环”应该循环多少次,然后如果你除以20,那么总共10次你的“for循环”将运行,每次运行它将发送20个地址进行地理编码。所以它不会达到50,并且很容易就可以检索。

相关问题