2014-01-26 3 views
4

지도 검색을 수행하려면 MKLocalSearch을 사용하고 있습니다. 내 문제는 응답에서 MKMapItems의 순서입니다. 예를 들어 내가 현재있는 도시를 검색하면 처음에는 도시 이름과 관련된 많은 업체가 반환되며 실제 도시를 찾으려면 잠시 아래로 스크롤해야합니다. 속성을 MKLocalSearchRequest으로 사용하여 가까운 지역에서 검색에 집중합니다.필터링/주문 MKLocalSearch 응답

내 질문은 :

  1. 당신은 응답이 당신에게 반환되는 순서에 영향을 수 있습니까? 예를 들어지도 앱은 첫 번째 문자를 입력 한 후 내 도시를 맨 위에 표시합니다. POI가 없거나 비즈니스가 위에 올라온 이유는 무엇입니까?
  2. 검색에서 업체를 완전히 삭제하고 이에 대한 응답으로 주소를 가져 오는 방법이 있습니까? 여기

관련된 경우 또는 확실하지,하지만 검색에 대한 코드입니다 : MKLocalSearchRequest

-(void)issueLocalSearchLookup:(NSString *)searchString { 
    MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(self.location.coordinate, 30000, 30000); 
    self.localSearchRequest = [[MKLocalSearchRequest alloc] init]; 
    self.localSearchRequest.region = region; 
    self.localSearchRequest.naturalLanguageQuery = searchString; 
    self.localSearch = [[MKLocalSearch alloc] initWithRequest:self.localSearchRequest]; 

    [self.localSearch startWithCompletionHandler:^(MKLocalSearchResponse *response, NSError *error) { 
     if(error){ 
      NSLog(@"LocalSearch failed with error: %@", error); 
      return; 
     } else { 
      for(MKMapItem *mapItem in response.mapItems){ 
       [self.data addObject:mapItem]; 
      } 
      [self.searchDisplayController.searchResultsTableView reloadData]; 
     } 
    }]; 
} 
+0

가 도움이 될 수 있습니다 아래 링크를 참조하시기 바랍니다. http://stackoverflow.com/questions/14950896/showing-nearby-restaurants-in-mkmap-view –

답변

4

만 naturalLanguageQuery 및 지역 매개 변수로 받아들이는, 그래서 당신은 "주소 만 반환하는 검색을 수행 할 수 있습니까? "- 아니요.

그러나 요청 완료 후 목록을 필터링하는 것은 매우 쉽습니다. 목록에서 비즈니스를 필터링하려면 간단한 NSPredicate가 해당 작업을 수행하십시오.

NSPredicate *noBusiness = [NSPredicate predicateWithFormat:@"business.uID == 0"]; 
NSMutableArray *itemsWithoutBusinesses = [response.mapItems mutableCopy]; 
[itemsWithoutBusinesses filterUsingPredicate:noBusiness]; 
+1

기술적으로이 문제가 해결되지만 실제로는 실제로 쓸모가 없습니다. MKLocalSearch는 10 개의 결과 만 반환하기 때문에 검색 후 필터를 적용하면 결과가 하나 또는 두 개가되는 경우가 있습니다. 예를 들어 도시 이름을 검색하는 경우 처음 10 개의 결과가 항상 비즈니스이므로 도시 이름을 다시는 알 수 없습니다. – Joel

+0

Apple이 반환 한 비즈니스에 대한 ID를 어디서 제공합니까? – thedeveloper3124

+0

이것은 개인 Apple 프레임 워크입니다 – thedeveloper3124

0

오히려 MKLocalSearch를 사용하는 것보다, 당신은 CLGeocoder를 사용하여 역 지오 코드 쿼리를 할 수있는 :

CLGeocoder *geo = [[CLGeocoder alloc] init]; 

[geo reverseGeocodeLocation:location completionHandler:^(NSArray *placemarks, NSError *error) { 
    // look at the placemarks and grab the locality out of them to get the city name 

}];