Géolocalisation et cartes en Swift : aperçu de CoreLocation et MapKit
Le développement d'applications pour iOS et macOS nécessite souvent de travailler avec des données géographiques et la visualisation de cartes. Dans l'écosystème Apple, deux frameworks puissants existent à cet effet : CoreLocation (pour la détermination de la position, le géocodage et les régions de surveillance) et MapKit (pour l'affichage de cartes, l'ajout d'annotations et la construction d'itinéraires). Dans cet article, nous détaillerons leurs fonctionnalités et fournirons des exemples pratiques en Swift.
1. CoreLocation : obtention des coordonnées de l'appareil
CoreLocation donne accès aux moyens matériels de détermination de la position : GPS, Wi-Fi et réseaux cellulaires. Pour commencer, il est nécessaire d'importer le framework et de demander l'autorisation à l'utilisateur.
Configuration des autorisations
Dans le fichier Info.plist, ajoutez les clés :
NSLocationWhenInUseUsageDescription— pour une utilisation de l'application en mode actifNSLocationAlwaysAndWhenInUseUsageDescription— pour la surveillance en arrière-plan
Exemple d'obtention de la position actuelle
import CoreLocation
class LocationManager: NSObject, CLLocationManagerDelegate { private let manager = CLLocationManager() override init() { super.init() manager.delegate = self manager.desiredAccuracy = kCLLocationAccuracyBest } func requestPermission() { manager.requestWhenInUseAuthorization() } func startUpdating() { manager.startUpdatingLocation() } // MARK: - Delegate func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { guard let location = locations.last else { return } print("Latitude : \\(location.coordinate.latitude), Longitude : \\(location.coordinate.longitude)") } func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) { print("Erreur : \\(error.localizedDescription)") }}2. MapKit : affichage de cartes et annotations
MapKit permet d'intégrer les cartes Apple Maps dans une application. La classe principale est MKMapView. Examinons la configuration de base et l'ajout de marqueurs.
Création d'une carte dans le code
import MapKitimport SwiftUI
struct MapView: UIViewRepresentable { @Binding var region: MKCoordinateRegion func makeUIView(context: Context) -> MKMapView { let mapView = MKMapView() mapView.delegate = context.coordinator return mapView } func updateUIView(_ uiView: MKMapView, context: Context) { uiView.setRegion(region, animated: true) } // Coordinator pour gérer les événements func makeCoordinator() -> Coordinator { Coordinator(self) } class Coordinator: NSObject, MKMapViewDelegate { var parent: MapView init(_ parent: MapView) { self.parent = parent } }}Ajout d'une annotation (épingle sur la carte)
import MapKit
class CustomAnnotation: NSObject, MKAnnotation { var coordinate: CLLocationCoordinate2D var title: String? var subtitle: String? init(coordinate: CLLocationCoordinate2D, title: String, subtitle: String) { self.coordinate = coordinate self.title = title self.subtitle = subtitle }}
// Utilisation :let annotation = CustomAnnotation( coordinate: CLLocationCoordinate2D(latitude: 55.7558, longitude: 37.6173), title: "Moscou", subtitle: "Place Rouge")mapView.addAnnotation(annotation)3. Géocodage : conversion d'une adresse en coordonnées
La classe CLGeocoder permet de convertir une adresse textuelle en coordonnées (géocodage direct) et inversement (géocodage inverse).
import CoreLocation
l