Видео: Программа Day-night, или Как солнце ходит по небу, часть 2 (by daybit) 2025
Преобразование адреса в набор координат карты в вашем приложении iOS называется forward geocoding, , тогда как преобразование из набора координат в адрес является обратный геокодирование . Как прямое, так и обратное геокодирование поддерживаются в классе CLGeocoder от Apple, который входит в структуру ядра CoreLocation.
Класс CLGeocoder предоставляет услуги для преобразования между координатой (заданной как широта и долгота) и адресом этой координаты. Класс CoreLocation также предоставляет службы для обратного: возвращает значение координаты для текстовой строки, которая является удобным для пользователя представлением этой координаты.
Чтобы использовать объект CoreLocation, сначала создайте его, а затем отправьте ему сообщение о перекрестном или обратном геокодировании.
-
Обратное геокодирование: Эти запросы принимают значение широты и долготы и находят читаемый пользователем адрес.
-
Forward-geocoding: Эти запросы принимают читаемый пользователем адрес и определяют соответствующее значение широты и долготы. Запросы вперед-геокодирования могут также возвращать дополнительную информацию о указанном местоположении, например, о точке интереса или здании в этом месте.
Для обоих типов запросов результаты возвращаются в виде массива объектов в блок обработчика завершения. В случае запросов вперед-геокодирования несколько объектов CLPlacemark могут быть возвращены, если предоставленная информация дает несколько возможных местоположений.
Объект CLPlacemark содержит, помимо прочего, следующие свойства:
-
location: очень полезно для геокодирования вперед
-
name: имя метки
-
addressDictionary: словарь, содержащий ключи адресной книги и значения для метки
-
ISOcountryCode: сокращенное название страны
-
страна: название страна
-
postalCode: Почтовый индекс
-
AdministrativeArea: Государство или провинция
-
subAdministrativeArea: Дополнительная информация об административной зоне (например, округ)
-
местность: Город
-
subLocality: Дополнительная информация об уровне города например, окрестности или общее название для местоположения
-
: улица
-
subThoroughfare: дополнительная информация об уровне улицы, такая как номер здания
-
: CLRegion
Ориентир и географическая информация также могут быть доступный в объекте CLPlacemark в следующих свойствах:
-
areasofInterest: соответствующие области, связанные с меткой
-
inlandWater: название внутреннего водного объекта, связанного с отметкой
-
: океан: название океана связанные с местом mark
Чтобы принимать разумные решения о том, какие типы данных должны возвращаться, сервер геокодирования использует всю информацию, предоставленную ему при обработке запроса.Например, если пользователь движется быстро по шоссе, геокодер может вернуть имя всей области, а не имя небольшого парка, через который проходит пользователь.
Вот некоторые довольно свободные правила (Apple) для использования объекта CLGeocoder:
-
Отправляйте не более одного запроса на геокодирование для любого действия пользователя. То есть, не начинайте другой запрос до тех пор, пока первый не завершится.
-
Если приложение нуждается в геокодированном местоположении в нескольких местоположениях карты, сохраните, а затем повторно используйте результаты из исходного запроса геокодирования вместо того, чтобы делать другое.
-
Если вы хотите автоматически обновлять текущее местоположение пользователя (например, когда пользователь перемещается), выдавать новые запросы на геокодирование только тогда, когда пользователь переместился на значительное расстояние, прошло разумное количество времени или и то, и другое. Например, в типичной ситуации вы не должны отправлять более одного запроса на геокодирование в минуту.
-
Не запускайте запрос геокодирования, если ваше приложение неактивно или в фоновом режиме.
-
Устройство на базе iOS должно иметь доступ к сети, чтобы объект CLGeocoder возвращал подробную информацию о меток. Хотя iOS хранит достаточно информации локально, чтобы сообщать локализованное название страны и код страны ISO для многих местоположений, если информация о стране недоступна для определенного местоположения, объект CLGeocoder все равно может сообщить об ошибке.
Как вы можете догадаться, геокодирование дорого - вот почему эти правила подчеркивают кеширование данных и не обновление, если это не необходимо.
Вы можете использовать объект CLGeocoder в сочетании с классами MapKit или независимо от них.
