Какой у вас опыт работы с картами (MapKit/Google Maps) в iOS?

«Какой у вас опыт работы с картами (MapKit/Google Maps) в iOS?» — вопрос из категории Other, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Имею опыт интеграции и кастомизации картографических решений на iOS.

Основные задачи и технологии:

Задача Реализация (MapKit)
Отображение карты MKMapView, настройка региона (MKCoordinateRegion).
Работа с метками Кастомные MKAnnotationView, кластеризация (MKMarkerAnnotationView, iOS 11+).
Построение маршрутов MKDirections, отрисовка полилиний (MKPolylineRenderer).
Геокодирование CLGeocoder для преобразования адреса в координаты и обратно.
Трекинг пользователя CLLocationManager, MKUserTrackingButton.

Пример: Добавление кастомной аннотации и отображение региона.

import MapKit

// 1. Создание аннотации
let coordinate = CLLocationCoordinate2D(latitude: 55.751244, longitude: 37.618423)
let annotation = MKPointAnnotation()
annotation.coordinate = coordinate
annotation.title = "Москва"
annotation.subtitle = "Столица России"
mapView.addAnnotation(annotation)

// 2. Настройка отображаемого региона
let region = MKCoordinateRegion(
    center: coordinate,
    latitudinalMeters: 5000, // ~5 км по вертикали
    longitudinalMeters: 5000  // ~5 км по горизонтали
)
mapView.setRegion(region, animated: true)

// 3. (Опционально) Реализация делегата для кастомного вида аннотации
func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
    guard !annotation.isKind(of: MKUserLocation.self) else { return nil }
    let identifier = "CustomPin"
    var annotationView = mapView.dequeueReusableAnnotationView(withIdentifier: identifier)
    if annotationView == nil {
        annotationView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: identifier)
        annotationView?.canShowCallout = true
    } else {
        annotationView?.annotation = annotation
    }
    return annotationView
}

Также работал с Google Maps SDK, включая кастомные тайлы, Ground Overlays и оптимизацию производительности при отображении сотен маркеров.