1

我从网络服务获得 82 个地址,并且我正在使用正向地理编码器。现在如何在 mapview 上一次显示所有 82 个地址。我将代码放在 for 循环中,但它会抛出错误“对此 API 密钥进行了太多查询”。有没有办法发送所有地址并获取所有地址的位置?这是我在 for 循环中的代码...

 NSMutableDictionary *dictLoc = [[self.arrObjects objectAtIndex:indexValue]valueForKey:@"object_location"];

    NSString *searchString = [NSString stringWithFormat:@"%@,%@,%@,%@",[dictLoc valueForKey:@"object_location_number"],[dictLoc valueForKey:@"object_location_street"],[dictLoc valueForKey:@"object_location_city"],[dictLoc valueForKey:@"object_location_zip"]];

    //        if (self.forwardGeocoder == nil) {
    BSForwardGeocoder *forwardGeocoder = [[[BSForwardGeocoder alloc] initWithDelegate:self] autorelease];
    //        }

    CLLocationCoordinate2D southwest, northeast;
    southwest.latitude = 34.172684;
    southwest.longitude = -118.604794;
    northeast.latitude = 34.236144;
    northeast.longitude = -118.500938;
    BSForwardGeocoderCoordinateBounds *bounds = [BSForwardGeocoderCoordinateBounds boundsWithSouthWest:southwest northEast:northeast];

    // Forward geocode!
#if NS_BLOCKS_AVAILABLE
    [forwardGeocoder forwardGeocodeWithQuery:searchString regionBiasing:nil viewportBiasing:bounds success:^(NSArray *results) {
        [self forwardGeocodingDidSucceed:forwardGeocoder withResults:results withIndexValue:indexValue];
    } failure:^(int status, NSString *errorMessage) {
        if (status == G_GEO_NETWORK_ERROR) {
            [self forwardGeocoderConnectionDidFail:forwardGeocoder withErrorMessage:errorMessage];
        }
        else {
            [self forwardGeocodingDidFail:forwardGeocoder withErrorCode:status andErrorMessage:errorMessage];
        }
    }];
#else
    [self.forwardGeocoder forwardGeocodeWithQuery:searchString regionBiasing:nil viewportBiasing:nil];
#endif

提前致谢.. :)

4

2 回答 2

1

我将代码放在 for 循环中,但它抛出错误“对此 API 密钥进行了太多查询”。有没有办法发送所有地址并获取所有地址的位置?

否。此错误意味着您使用的 API 限制了您可以进行的查询数量。摆脱此错误并出于任何原因显示所有“82”引脚的唯一方法是联系 API 开发人员并了解如何增加在给定的 API 中可以进行的查询数量大体时间。很有可能这是一项优质服务,您可能需要为此付费。

现在,一个更好的解决方案是永远不要在地图上显示 82 个图钉,更像 5/10 的东西对用户更友好。您的 API 可能会允许每分钟 10 个查询或类似的查询。

一个更酷的解决方案是构建一个查询队列,它只允许您的代码调用 10 个查询,然后将其他查询排队。然后在分配的时间之后,它会再进行 10 次查询。

于 2013-02-19T10:18:29.257 回答
0

您似乎无法根据 API 进行批量转发地理编码请求:

@interface BSForwardGeocoder : NSObject <NSURLConnectionDataDelegate>
- (id)initWithDelegate:(id<BSForwardGeocoderDelegate>)aDelegate;
- (void)forwardGeocodeWithQuery:(NSString *)searchQuery regionBiasing:(NSString *)regionBiasing viewportBiasing:(BSForwardGeocoderCoordinateBounds *)viewportBiasing;

#if NS_BLOCKS_AVAILABLE
- (void)forwardGeocodeWithQuery:(NSString *)searchQuery regionBiasing:(NSString *)regionBiasing viewportBiasing:(BSForwardGeocoderCoordinateBounds *)viewportBiasing success:(BSForwardGeocoderSuccess)success failure:(BSForwardGeocoderFailed)failure;
#endif

@property (nonatomic, assign) id<BSForwardGeocoderDelegate> delegate;
@property (nonatomic, assign) BOOL useHTTP;

@end

此外,我还没有遇到过执行批量地理编码请求的 API,但也许您可以尝试不同的 API(Google Geocoding API?),这可能会给您更高的请求限制。

于 2013-02-19T10:24:39.503 回答