Géolocalisation et cartes en Swift : CoreLocation et MapKit pour iOS/macOS

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

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 actif
  • NSLocationAlwaysAndWhenInUseUsageDescription — 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

Recommendations