Включение поиска
Для поддержки поисков на основе вводимых пользователями запросов Набор Карты обеспечивает MKLocalSearch
API. Приложения могут использовать этот API для выполнения поисков расположений, которые пользователи описывают по имени, адрес или тип, такой как кофе или театр.
Несмотря на то, что локальный поиск и геокодирование подобны, они поддерживают различные варианты использования. Используйте геокодирование, когда Вы захотите преобразовать между координатами карты и структурированным адресом, такими как адрес Адресной книги. Используйте локальный поиск, когда Вы хотите найти ряд расположений, соответствующих ввод пользователя.
Искать расположение, соответствующее запрос, который пользователь вводит в поле поиска:
Создайте
MKLocalSearchRequest
возразите и укажите строку, содержащую запрос на естественном языке пользователя.(Необязательно) Определите географическую область для сужения результатов поиска. Рекомендуется определить область, чтобы гарантировать, что пользователь получает релевантные результаты.
Создайте
MKLocalSearch
возразите и инициализируйте его с поисковым запросом, который Вы создали на шаге 1.Запустите поиск путем вызова
startWithCompletionHandler:
и указание обработчика завершения блокирует для обработки результатов.
Каждый MKLocalSearch
объект выполняет только один поиск; если Вы хотите выполнить многократные поиски, необходимо определить многократные поисковые запросы и использовать их для создания многократных поисковых объектов. Поскольку поиск выполняется асинхронно, можно создать и начать многократные поиски параллельно и обработать результаты, когда они поступают.
Результаты локального поиска предоставлены как ряд MKMapItem
объекты. Каждый объект элемента карты содержит следующие атрибуты:
Координаты карты расположения
Структурированный адрес, представляющий расположение
Если расположение является бизнесом, именем, телефонным номером, и URL, связанный с бизнесом, мог бы быть доступным
Перечисление 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]; |
}]; |