我在缩小地理编码器结果时遇到问题。这是我的代码:
CLLocationCoordinate2D centerLocation = CLLocationCoordinate2DMake(53, 10);
CLCircularRegion *region = [[CLCircularRegion alloc] initWithCenter: centerLocation radius:100 identifier:@"de"];
[self.geocoder geocodeAddressString:[NSString stringWithFormat:@"%@%@",textField.text,string] inRegion:region
completionHandler:^(NSArray* placemarks, NSError* error){
//filling the tableView code
}];
来自apple docs:
"指定区域可让您确定返回的结果集的优先级 到某个特定地理区域附近的地点"
但如果我开始点击最近的街道名称,我会得到来自世界各地的结果,但不是我想要的街道。我需要将整个街道名称放在字段中以进入placemarks
数组。如何从地理编码器获得最接近的第一个结果?
修改
我不知道地址是街道,邮政编码,城市名称还是地名。 bahavior类似于Map app,其中只有一个文本字段可以在所有地方搜索。
答案 0 :(得分:3)
“如果我开始点击最近的街道名称”
在我看来,您正在根据用户输入的查询进行搜索。您应该使用Map Kit中的MKLocalSearch来搜索用户可以按名称,地址或类型描述的位置。地理编码用于将地图坐标转换为结构化地址,反之亦然。
引用文档:
虽然本地搜索和地理编码类似,但他们支持 不同的用例。如果要在两者之间进行转换,请使用地理编码 地图坐标和结构化地址,例如地址簿 地址。如果要查找一组位置,请使用本地搜索 与用户的输入相匹配。
例如:
MKLocalSearchRequest *request = [MKLocalSearchRequest new];
request.naturalLanguageQuery = @"saint";
request.region = MKCoordinateRegionMakeWithDistance(CLLocationCoordinate2DMake(48.850354, 2.337341), 500, 500);
MKLocalSearch *search = [[MKLocalSearch alloc] initWithRequest:request];
[search startWithCompletionHandler:^(MKLocalSearchResponse *response, NSError *error) {
for (MKMapItem *item in response.mapItems) {
NSLog(@"item.placemark.name = %@", item.placemark.name);
}
}];
根据我指定的区域,我会得到以下结果:
item.placemark.name = Eglise Saint Sulpice
item.placemark.name = J'Go Saint Germain
item.placemark.name = Terrazza Saint Germain
item.placemark.name = Hôtel Odéon Saint Germain
item.placemark.name = Le Bon Saint Pourcain
item.placemark.name = Hotel Le Relais Saint Germain
item.placemark.name = Piscine Saint Germain
item.placemark.name = Bistrot de la Grille Saint Germain
item.placemark.name = Esprit Saint Germain
item.placemark.name = Hôtel Relais Saint Sulpice
然后,您可以随意使用您获得的结果做任何事情。