MKLocalSearch
を地図で検索したいです。この機能は、iOS 6.1以降で利用できます。誰でもこれを使う方法を知っているのですか、誰かがMKLocalSearch
の使い方の例を挙げることはできますか?ここMKLocalSearchを使用して地図上の場所を検索する
MKLocalSearchResponse documentation
MKLocalSearch
を地図で検索したいです。この機能は、iOS 6.1以降で利用できます。誰でもこれを使う方法を知っているのですか、誰かがMKLocalSearch
の使い方の例を挙げることはできますか?ここMKLocalSearchを使用して地図上の場所を検索する
MKLocalSearchResponse documentation
MKLocalSearch
のAPIはかなりわかりやすいです。そのnaturalLanguageQuery
を渡し、起動するローカル検索を知らせるMKLocalSearch
オブジェクト
alloc-init
MKLocalSearchRequest
MKMapItem
オブジェクトの配列を持つものを実行します。
検索:
// Create a search request with a string
MKLocalSearchRequest *searchRequest = [[MKLocalSearchRequest alloc] init];
[searchRequest setNaturalLanguageQuery:@"Cafe"];
// Create the local search to perform the search
MKLocalSearch *localSearch = [[MKLocalSearch alloc] initWithRequest:searchRequest];
[localSearch startWithCompletionHandler:^(MKLocalSearchResponse *response, NSError *error) {
if (!error) {
for (MKMapItem *mapItem in [response mapItems]) {
NSLog(@"Name: %@, Placemark title: %@", [mapItem name], [[mapItem placemark] title]);
}
} else {
NSLog(@"Search Request Error: %@", [error localizedDescription]);
}
}];
あなたは、このような検索のための地域を指定することができます。
// Search for Cafes in Paris
MKLocalSearchRequest *searchRequest = [[MKLocalSearchRequest alloc] init];
[searchRequest setNaturalLanguageQuery:@"Cafe"];
CLLocationCoordinate2D parisCenter = CLLocationCoordinate2DMake(48.8566667, 2.3509871);
MKCoordinateRegion parisRegion = MKCoordinateRegionMakeWithDistance(parisCenter, 15000, 15000);
[searchRequest setRegion:parisRegion];
また、ユーザーが持っていることをMKMapView
から地域を取ることができますズームイン。これは良好な結果を与える:
[searchRequest setRegion:self.mapView.region];
応答オブジェクト、MKLocalSearchResponse
を、すべての結果を含む領域であるMKMapItem
オブジェクト(mapItems
)と呼ばれるboundingRegion
MKCoordinateRegion
のアレイを含みます。あなたはすべての結果を表示するマップビューを設定するためにそれを使用することができます:
[self.mapView setRegion:response.boundingRegion];
MKMapItem
オブジェクトの配列は、(彼らは地図アプリに送信するために使用している)は、マップ上に配置することはできませんが、それぞれががマップに追加することができplacemark
プロパティが含まれています:ダブリンのため
[localSearch startWithCompletionHandler:^(MKLocalSearchResponse *response, NSError *error) {
if (!error) {
for (MKMapItem *mapItem in [response mapItems]) {
NSLog(@"Name: %@, MKAnnotation title: %@", [mapItem name], [[mapItem placemark] title]);
NSLog(@"Coordinate: %f %f", [[mapItem placemark] coordinate].latitude, [[mapItem placemark] coordinate].longitude);
// Should use a weak copy of self
[self.mapView addAnnotation:[mapItem placemark]];
}
} else {
NSLog(@"Search Request Error: %@", [error localizedDescription]);
}
}];
検索は、地図表示やログ上のピンを配置します
Name: Dublin, Co. Dublin, MKAnnotation title: Dublin, Co. Dublin, Ireland
Coordinate: 53.344104 -6.267494
返されたオブジェクトには、特にビジネスを検索した場合に詳細な詳細があります。ここにはいくつかあります:
[localSearch startWithCompletionHandler:^(MKLocalSearchResponse *response, NSError *error) {
if (!error) {
NSLog(@"Results: %@", [response mapItems]);
MKMapItem *mapItem = [[response mapItems] objectAtIndex:0];
NSLog(@"Name:%@ Phone:%@ URL:%@", [mapItem name], [mapItem phoneNumber], [mapItem url]);
NSLog(@"Placemark: %@", [mapItem placemark]);
MKPlacemark *placemark = [mapItem placemark];
NSLog(@"Placemark Address: %@", [placemark addressDictionary]);
MKCoordinateRegion boundingRegion = [response boundingRegion];
NSLog(@"Bounds: %f %f", boundingRegion.span.latitudeDelta, boundingRegion.span.longitudeDelta);
}
ためのチュートリアルである所定の場所約1キロ半径カフェを検索する例である:
MKLocalSearchRequest *request = [[MKLocalSearchRequest alloc] init];
CLLocationCoordinate2D location = CLLocationCoordinate2DMake(11.567898, 104.894430);
request.naturalLanguageQuery = @"cafe";
request.region = MKCoordinateRegionMakeWithDistance(location, 1000, 1000);
MKLocalSearch *search = [[MKLocalSearch alloc] initWithRequest:request];
[search startWithCompletionHandler:^(MKLocalSearchResponse *response, NSError *error){
for (MKMapItem *item in response.mapItems) {
NSLog(@"%@", item.name);
}
}];
検索に失敗した場合、空のリストは返されませんが、ドメインMKErrorDomain
のエラーが返されますコード4
。