需要来自 CLGeocoder 的坐标多于限制

问题描述 投票:0回答:2

以下代码仅返回前 10 个地址的坐标。但我需要 100 多个才能将其存储在数据库中。地理编码器有限制吗?我该怎么做?

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

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

    [geoCode geocodeAddressString:strcity completionHandler:^(NSArray *placemarks, NSError *error)
     {
         if (!error)
         {
             CLPlacemark *place = [placemarks objectAtIndex:0];
             CLLocation *location = place.location;
             CLLocationCoordinate2D coord = location.coordinate;

             NSString *tempLati=[[NSString alloc]initWithFormat:@"%g",coord.latitude];
             NSString *tempLongi=[[NSString alloc]initWithFormat:@"%g",coord.longitude];




             [objCountries.countryLatitude addObject:tempLati];
             [objCountries.countryLongitude addObject:tempLongi];

             [geoCode cancelGeocode];
         }
     }];


}
iphone objective-c mapkit clgeocoder
2个回答
2
投票

iOS 会限制 CLGeocoder 请求,具体情况各不相同,但通常一次允许 50 个左右的请求。 时间段是未知的。 您可以做的就是对其进行编码,一次对一个块进行地理编码,中间留出足够的停顿。 一旦可能,您应该存储结果,这样您就不会再次请求相同的地理编码。 请注意此处的 CLGeocoder 文档:CLGeocoder。 如果地理编码服务被滥用,Apple 可以限制您甚至暂停您的开发者帐户。


0
投票

一次发出 35 个请求,暂停直至完成,然后持续发出另外 35 个请求。

每个周期之间需要等待 90 秒。

根据我对一款应用程序的经验,这种方法在大约一年半的时间里(2023 年 4 月 - 2024 年 10 月)可靠地避免了速率限制。

© www.soinside.com 2019 - 2024. All rights reserved.