Включение поиска

Для поддержки поисков на основе вводимых пользователями запросов Набор Карты обеспечивает MKLocalSearch API. Приложения могут использовать этот API для выполнения поисков расположений, которые пользователи описывают по имени, адрес или тип, такой как кофе или театр.

Несмотря на то, что локальный поиск и геокодирование подобны, они поддерживают различные варианты использования. Используйте геокодирование, когда Вы захотите преобразовать между координатами карты и структурированным адресом, такими как адрес Адресной книги. Используйте локальный поиск, когда Вы хотите найти ряд расположений, соответствующих ввод пользователя.

Искать расположение, соответствующее запрос, который пользователь вводит в поле поиска:

  1. Создайте MKLocalSearchRequest возразите и укажите строку, содержащую запрос на естественном языке пользователя.

    (Необязательно) Определите географическую область для сужения результатов поиска. Рекомендуется определить область, чтобы гарантировать, что пользователь получает релевантные результаты.

  2. Создайте MKLocalSearch возразите и инициализируйте его с поисковым запросом, который Вы создали на шаге 1.

  3. Запустите поиск путем вызова startWithCompletionHandler: и указание обработчика завершения блокирует для обработки результатов.

Каждый MKLocalSearch объект выполняет только один поиск; если Вы хотите выполнить многократные поиски, необходимо определить многократные поисковые запросы и использовать их для создания многократных поисковых объектов. Поскольку поиск выполняется асинхронно, можно создать и начать многократные поиски параллельно и обработать результаты, когда они поступают.

Результаты локального поиска предоставлены как ряд MKMapItem объекты. Каждый объект элемента карты содержит следующие атрибуты:

Перечисление 8-1 показывает один способ создать поисковый запрос, инициировать локальный поиск и вывести на экран результаты как аннотации на карту.

Перечисление 8-1  , Ищущее расположения, соответствующие ввод пользователя

// Create and initialize a search request object.
MKLocalSearchRequest *request = [[MKLocalSearchRequest alloc] init];
request.naturalLanguageQuery = query;
request.region = self.map.region;
 
// Create and initialize a search object.
MKLocalSearch *search = [[MKLocalSearch alloc] initWithRequest:request];
 
// Start the search and display the results as annotations on the map.
[search startWithCompletionHandler:^(MKLocalSearchResponse *response, NSError *error)
{
   NSMutableArray *placemarks = [NSMutableArray array];
   for (MKMapItem *item in response.mapItems) {
      [placemarks addObject:item.placemark];
   }
   [self.map removeAnnotations:[self.map annotations]];
   [self.map showAnnotations:placemarks animated:NO];
}];