以下代码仅返回前 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];
}
}];
}
iOS 会限制 CLGeocoder 请求,具体情况各不相同,但通常一次允许 50 个左右的请求。 时间段是未知的。 您可以做的就是对其进行编码,一次对一个块进行地理编码,中间留出足够的停顿。 一旦可能,您应该存储结果,这样您就不会再次请求相同的地理编码。 请注意此处的 CLGeocoder 文档:CLGeocoder。 如果地理编码服务被滥用,Apple 可以限制您甚至暂停您的开发者帐户。
一次发出 35 个请求,暂停直至完成,然后持续发出另外 35 个请求。
每个周期之间需要等待 90 秒。
根据我对一款应用程序的经验,这种方法在大约一年半的时间里(2023 年 4 月 - 2024 年 10 月)可靠地避免了速率限制。