2014-10-22 1 views
0

У меня есть приложение в iOS 7.0. У меня есть вид карты, в котором пользователь может видеть результаты поиска на карте с помощью аннотаций.Поисковые запросы MapView видны с неправильными координатами

Я использовал пользовательскую аннотацию для этого, впервые аннотации были размещены с правильными координатами. Я имею в виду, что координаты местоположения пользователя размещались в правильном положении.

Но если я прокрутку карты и поиск местоположения, то она показывает мне аннотацию при неправильных координатах.

Ниже мой код, когда пользователь ищет любую вещь на карте. (Например гостиницы, музей, рестораны)

- (void) searchForPlace:(NSString *) keyWord { 

    [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES]; 
    [self.activityView setHidden:NO]; 

    [self.txtSearch resignFirstResponder]; 
    [self.txtSearch setEnabled:NO]; 

    MKLocalSearchRequest *request = [[MKLocalSearchRequest alloc] init]; 
    request.naturalLanguageQuery = keyWord; // @"restaurant" 
    MKCoordinateSpan span = MKCoordinateSpanMake(.1, .1); 

    CLLocationCoordinate2D location = self.mapView.userLocation.coordinate; 
    request.region = MKCoordinateRegionMake(location, span); 
    MKLocalSearch *search = [[MKLocalSearch alloc] initWithRequest:request]; 

    [search startWithCompletionHandler: 
    ^(MKLocalSearchResponse *response, NSError *error) { 
     [self.txtSearch setEnabled:YES]; 
     [self removeMapOverlay]; 

     [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO]; 
     [self.activityView setHidden:YES]; 
     if (!error) { 
      // Result found 
      @try { 

       if (response.mapItems && [response.mapItems count] > 0) { 

        for (MKMapItem *item in response.mapItems) { 
         MKPlacemark *placeMark = item.placemark; 

         // Address details 
         NSDictionary *address = placeMark.addressDictionary; 
         NSString *titleString = @""; 
         NSString *subtitleString = @""; 
         NSString *name = @""; 
         NSString *Thoroughfare = @""; 
         NSString *State = @""; 
         NSString *City = @""; 
         NSString *Country = @""; 

         name = [address objectForKey:@"Name"] ? [address objectForKey:@"Name"] : @""; 
         Thoroughfare = [address objectForKey:@"Thoroughfare"] ? [address objectForKey:@"Thoroughfare"] : @""; 
         State = [address objectForKey:@"State"] ? [address objectForKey:@"State"] : @""; 
         City = [address objectForKey:@"City"] ? [address objectForKey:@"City"] : @""; 
         Country = [address objectForKey:@"Country"] ? [address objectForKey:@"Country"] : @""; 

         titleString = [NSString stringWithFormat:@"%@ %@", name, Thoroughfare]; 
         subtitleString = [NSString stringWithFormat:@"%@ %@ %@", State, City, Country]; 

         CustomAnnotation *annotation = [[CustomAnnotation alloc] initWithTitle:titleString subTitle:subtitleString detailURL:item.url location:placeMark.location.coordinate]; 
         [self.mapView addAnnotation:annotation]; 
        } 
        [self mapView:self.mapView regionDidChangeAnimated:YES]; 
       } 

      } 
      @catch (NSException *exception) { 
       NSLog(@"Exception :%@",exception.description); 
      } 

     } else { 
      NSLog(@"No result found."); 
     } 
    }]; 
} 

ответ

0

Я думаю, что это из-за этой линии:

CLLocationCoordinate2D location = self.mapView.userLocation.coordinate; 

Что здесь проблема в том, что вы делаете запрос поиска для region вокруг вашего местоположения пользователя.

Вам необходимо установить координаты центра region из MKMapView. Так что регион для области поиска будет рассмотрен, где бы вы ни прокручивались на карте.

Перейдите по этой ссылке и проверьте результаты поиска.

CLLocationCoordinate2D location = self.mapView.centerCoordinate; 
+0

Да, это была проблема. Благодаря :) –

Смежные вопросы