CLLocation,地理编码器和区域搜索

时间:2014-11-03 17:22:51

标签: ios objective-c geocoding cllocationmanager cllocation

我在缩小地理编码器结果时遇到问题。这是我的代码:

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,其中只有一个文本字段可以在所有地方搜索。

1 个答案:

答案 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

然后,您可以随意使用您获得的结果做任何事情。