gpt4 book ai didi

objective-c - 对多个地址进行地理编码 - CLGeocoder

转载 作者:行者123 更新时间:2023-12-04 21:16:40 27 4
gpt4 key购买 nike

我需要使用 CLGeocoder 对大量地址进行地理编码,而不是 Google API。

我的问题是我的代码只为下面数组中的第一个地址添加了注释。但是,该函数被调用了适当次数 - 在为所有地址调用该函数后,该 block 仅针对第一个地址运行:

- (void)mapPoints {
NSString *foo = [[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"names%d", self.indexOfSchool] ofType:@"plist"];
NSArray *description = [NSArray arrayWithContentsOfFile:foo];
NSString *bar = [[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"%d1", self.indexOfSchool] ofType:@"plist"];
NSArray *details = [NSArray arrayWithContentsOfFile:bar];

NSString *path = [[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"%d0", self.indexOfSchool] ofType:@"plist"];
NSArray *addresses = [NSArray arrayWithContentsOfFile:path];
self.saved = [NSMutableArray alloc] init];
for (int q = 0; q < addresses.count; q+= 20) {
[self annotate:[addresses objectAtIndex:q] detail:[details objectAtIndex:q] andDesc:[description objectAtIndex:q]];
}
}

see updated annotate: method below...

我的日志是这样显示的:

here
here
here
here
.
..
...
....
<MKPointAnnotation: 0x16fc12e0>

因此,虽然该函数是通过循环调用的,但除了第一个结果之外,该 block 不会运行任何结果。

我知道我的地址很好。这不适用于对该函数的任意数量 (>1) 调用。循环中的 += 20 与仅绘制一个点无关:这对 ++ 也不起作用(也有大约 200 个结果)。

我是 block 的新手,所以希望这是一个简单的修复。非常感谢任何帮助!

编辑改为这样做:

- (void)annotate:(NSString *)address detail:(NSString *)detail andDesc:(NSString *)description {
CLGeocoder *geocoder = [[CLGeocoder alloc] init];
[geocoder geocodeAddressString:address
completionHandler:^(NSArray* placemarks, NSError* error) {
if (placemarks && placemarks.count > 0) {
CLPlacemark *topResult = [placemarks objectAtIndex:0];
MKPlacemark *placemark = [[MKPlacemark alloc] initWithPlacemark:topResult];
MKPointAnnotation *point = [[MKPointAnnotation alloc] init];
point.coordinate = placemark.coordinate;
point.title = description;
point.subtitle = [NSString stringWithFormat:@"%@ miles from origin", detail];
MKCoordinateRegion region = self.directionsView.region;
region.center = [(CLCircularRegion *)placemark.region center];
region.span.longitudeDelta /= 8.0;
region.span.latitudeDelta /= 8.0;
[self.directionsView addAnnotation:point];
NSLog(@"%@", point);
[self.directionsView setRegion:region animated:YES];
}
}
];
[self.saved addObject:geocoder];
NSLog(@"%@", geocoder);
}

... 仍然拉出一张没有注释的空白 map ——甚至不是第一个。地理编码器数组在每次调用该函数时都有不同的内存地址,因此该部分似乎可以正常工作。

最佳答案

您连续多次调用 geocodeAddressString,但 apple 的文档说

After initiating a forward-geocoding request, do not attempt to initiate another forward- or reverse-geocoding request.

所以我认为正在发生的事情是,当您发出新请求时,当前请求被取消,或者如果一个请求已经在进行中,则所有新请求都将被忽略。

作为解决方法,您可以对一个点进行地理编码,然后对完成 block 中的下一个点进行地理编码,或者创建地理编码器的多个实例

关于objective-c - 对多个地址进行地理编码 - CLGeocoder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19838336/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com