解决方法
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);
- }