1

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

我已经看到 NSProgrammer 对以下问题的回答:

iPhone iOS5 CLGeocoder 如何对大量(200)组地址进行地理编码?

对于他提到的那种延迟有什么建议吗?该延迟会在处理程序内部并在另一个线程上运行吗?

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似乎在不同的线程中运行,我无法在方法调用之间造成延迟。

4

2 回答 2

0

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

于 2013-03-21T13:23:14.940 回答
0

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

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

但是如果用户决定加载另一组联系人,那么我必须根据要加载的联系人组重新考虑我的逻辑。所以我必须跟踪要加载哪个组(以前的一个或一个新的),该组的联系人数量是否超过 40。

我必须注意的另一个重要因素是时间。为此,我有一个静态NSDate变量,它始终跟踪CLGeocoder上次工作的“时间”,如果当前时间(CLGeocoder即将使用的时间)没有 1 分钟的差异,那么我必须延迟加载地图。

这就是我使用CLGeocoder. 我相信逻辑可以在很大程度上优化,输出会更快。如果有人提出更好的实现,将不胜感激。

于 2013-03-27T12:54:12.490 回答