解决方法
MKLocalSearch
的API非常容易理解.最基本的,你
> alloc-init和MKLocalSearchRequest
>将其naturalLanguageQuery设置为某个搜索词
>使用搜索请求初始化MKLocalSearch对象
>告诉本地搜索开始,将其传递给完成处理程序
>对响应中的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对象数组不能放在地图上(它们用于发送到地图应用程序),但每个对象都包含一个可以添加到地图的地标属性:
[localSearch startWithCompletionHandler:^(MKLocalSearchResponse *response,MKAnnotation title: %@",[[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,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 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); }