الموقع الجغرافي والخرائط في Swift (iOS/macOS): Core Location وMapKit
غالبًا ما يتطلب تطوير تطبيقات الهواتف المحمولة وأجهزة الكمبيوتر المكتبية ضمن نظام Apple البيئي دمج وظائف الموقع الجغرافي وعرض الخرائط. في Swift، يتم استخدام إطارين قويين لهذه الأغراض: Core Location (لتحديد الموقع) وMapKit (للعمل مع الخرائط). في هذه المقالة، سنشرح بالتفصيل إمكانياتهما، ونقدم أمثلة عملية على الكود، ونخبرك بكيفية استخدام هذه الأدوات بفعالية في مشاريعك.
1. Core Location: الحصول على الإحداثيات والعمل مع البيانات الجغرافية
Core Location هو إطار يوفر الوصول إلى الوسائل البرمجية والمادية لتحديد موقع الجهاز. وهو يدعم GPS وWi-Fi وأبراج الخلايا وiBeacon. الإمكانيات الرئيسية:
- تحديد الإحداثيات الحالية (خط العرض، خط الطول)
- مراقبة التغييرات الكبيرة في الموقع
- المناطق الجغرافية — الدخول/الخروج من منطقة محددة
- تحديد اتجاه وسرعة الحركة
- الترميز الجغرافي العكسي (العنوان من الإحداثيات)
1.1. إعداد أذونات الوصول
للعمل مع الموقع الجغرافي، يجب طلب الإذن من المستخدم. في Info.plist، أضف المفاتيح التالية:
NSLocationWhenInUseUsageDescription— للاستخدام فقط عندما يكون التطبيق نشطًاNSLocationAlwaysAndWhenInUseUsageDescription— للمراقبة في الخلفية
1.2. مثال: الحصول على الموقع الحالي
لننشئ مدير موقع بسيط:
import CoreLocation
class LocationManager: NSObject, CLLocationManagerDelegate { let manager = CLLocationManager() var currentLocation: CLLocation? override init() { super.init() manager.delegate = self manager.desiredAccuracy = kCLLocationAccuracyBest manager.requestWhenInUseAuthorization() manager.startUpdatingLocation() } func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { guard let location = locations.last else { return } currentLocation = location print("خط العرض: \\(location.coordinate.latitude)") print("خط الطول: \\(location.coordinate.longitude)") manager.stopUpdatingLocation() } func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) { print("خطأ: \\(error.localizedDescription)") }}2. MapKit: عرض الخرائط والعمل مع التعليقات التوضيحية
يتيح MapKit تضمين خرائط Apple Maps في التطبيقات. يدعم:
- عرض الخرائط القياسية، والقمر الصناعي، والهجينة
- إضافة التعليقات التوضيحية (دبابيس، علامات مخصصة)
- بناء المسارات (بالسيارة، مشيًا، وسائل النقل العام)
- تتبع موقع المستخدم على الخريطة
2.1. الإعداد الأساسي لـ MKMapView
أضف MKMapView في storyboard أو أنشئه برمجيًا:
import MapKit
class MapViewController: UIViewController { @IBOutlet weak var mapView: MKMapView! override func viewDidLoad() { super.viewDidLoad() mapView.mapType = .standard mapView.showsUserLocation = true mapView.delegate = self }}2.2. إضافة التعليقات التوضيحية
لننشئ تعليقًا توضيحيًا مخصصًا:
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 }}
// إضافة إلى الخريطةlet annotation = CustomAnnotation