2014-11-03 58 views
1

我有縮小Geocoder結果的問題。這裏是我的代碼: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數組。我怎樣才能從地理編碼器獲得最近的結果?

編輯:

我不知道,如果地址是街道,郵政編碼,城市名或地名。行爲類似於地圖應用程序,其中只有一個文本字段在所有地方搜索。

+0

當你不指定'region'(即傳遞'nil')時會發生什麼?指定區域不會將結果限制在該區域內,它會根據區域的接近度來優先考慮結果。 – 2014-11-03 17:27:49

+0

如果這能正常工作,我會非常高興。但現在我有一個問題,即使我通過區域,我也有無限制的結果 – Kuba 2014-11-03 17:55:51

回答

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 

然後,你可以自由地做任何事情你想要得到的結果。

+0

完美!謝謝! – Kuba 2014-11-13 10:10:54