2014-04-12 2 views
0

mapkit 및 MKLocalSearch를 사용하여 현재 사용자 영역 내의 비즈니스 위치를 검색합니다. 그러나 지역이 나만큼 필요한 것처럼 보이지 않으며 일부 비즈니스 위치는 내 현재 위치를 해당 비즈니스와 더 가깝게 설정하지 않으면 검색 결과에 표시되지 않습니다. 범위를 75 마일로하고 싶습니다. 코드 내에서 영역을 확장하는 방법에 대한 제안이 있습니까? 나는 mapkit을 처음 사용하는데 도움이되는 것을 찾을 수 없었다. 내 검색 방법을 원합니다.MKlocalSearch 맵킷에서 검색 영역을 확장하십시오.

- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar { 

// Cancel any previous searches. 
[localSearch cancel]; 

// Perform a new search. 
MKLocalSearchRequest *request = [[MKLocalSearchRequest alloc] init]; 
request.naturalLanguageQuery = searchBar.text; 
request.region = self.mapView.region; 

[UIApplication sharedApplication].networkActivityIndicatorVisible = YES; 
localSearch = [[MKLocalSearch alloc] initWithRequest:request]; 

[localSearch startWithCompletionHandler:^(MKLocalSearchResponse *response, NSError *error){ 

    [UIApplication sharedApplication].networkActivityIndicatorVisible = NO; 

    if (error != nil) { 
     [[[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Map Error",nil) 
            message:[error localizedDescription] 
            delegate:nil 
          cancelButtonTitle:NSLocalizedString(@"OK",nil) otherButtonTitles:nil] show]; 
     return; 
    } 

    if ([response.mapItems count] == 0) { 
     [[[UIAlertView alloc] initWithTitle:NSLocalizedString(@"No Results",nil) 
            message:nil 
            delegate:nil 
          cancelButtonTitle:NSLocalizedString(@"OK",nil) otherButtonTitles:nil] show]; 
     return; 
    } 

    results = response; 

    [self.searchDisplayController.searchResultsTableView reloadData]; 
}]; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
return [results.mapItems count]; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

static NSString *IDENTIFIER = @"SearchResultsCell"; 

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:IDENTIFIER]; 
if (cell == nil) { 
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:IDENTIFIER]; 
} 

MKMapItem *item = results.mapItems[indexPath.row]; 

cell.textLabel.text = item.name; 
cell.detailTextLabel.text = item.placemark.addressDictionary[@"Street"]; 

return cell; 
} 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
[self.searchDisplayController setActive:NO animated:YES]; 

MKMapItem *item = results.mapItems[indexPath.row]; 


[self.mapView setCenterCoordinate:item.placemark.location.coordinate animated:YES]; 

[self.mapView setUserTrackingMode:MKUserTrackingModeNone]; 

} 

답변

2
request.region = MKCoordinateRegionMakeWithDistance(self.mapView.userLocation.location.coordinate, 
120701, 120701); 
// 120701 meters is 75 miles 

또는 당신은 이미 위치에있는 경우 : 이것은 당신이지도를 확장하지 않고 넓은 지역을 검색 할 수 있습니다처럼

request.region = MKCoordinateRegionMakeWithDistance(location.coordinate, 
120701, 120701); 

독립적으로 검색 영역을 설정합니다.

+1

이 방법을 사용하는 방법은 무엇입니까? – DevilInDisguise