الموقع الجغرافي والخرائط في Swift: Core Location وMapKit (iOS/macOS)

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

الموقع الجغرافي والخرائط في Swift (iOS/macOS): Core Location وMapKit



غالبًا ما يتطلب تطوير التطبيقات الحديثة لنظامي iOS وmacOS العمل مع الموقع الجغرافي والخرائط. في نظام Apple البيئي، يوجد إطاران قويان لهذا الغرض: Core Location (الحصول على البيانات الجغرافية) وMapKit (عرض الخرائط، التعليقات التوضيحية، المسارات). في هذه المقالة، سنشرح بالتفصيل إمكانياتهما، ونقدم أمثلة عملية بلغة Swift، ونوضح كيفية دمج الموقع الجغرافي في تطبيقك.



1. Core Location: تحديد الموقع



Core Location هو إطار عمل للحصول على المعلومات الجغرافية: الإحداثيات، الارتفاع عن مستوى سطح البحر، اتجاه الحركة، بالإضافة إلى مراقبة المناطق الجغرافية (geofencing). يعمل مع GPS وWi-Fi وأبراج الخلايا وiBeacon.



1.1. إعداد الأذونات



لاستخدام الموقع الجغرافي، يجب طلب الإذن من المستخدم. في ملف Info.plist، أضف أحد المفاتيح التالية:

  • NSLocationWhenInUseUsageDescription — للحصول على البيانات فقط عند استخدام التطبيق بنشاط.
  • NSLocationAlwaysAndWhenInUseUsageDescription — للمراقبة في الخلفية (يتطلب شرحًا إضافيًا).


1.2. الحصول على الإحداثيات الحالية



import CoreLocation

class LocationManager: NSObject, CLLocationManagerDelegate { private let manager = CLLocationManager() var onLocationUpdate: ((CLLocation) -> Void)?

override init() { super.init() manager.delegate = self manager.desiredAccuracy = kCLLocationAccuracyBest }

func requestLocation() { manager.requestWhenInUseAuthorization() manager.startUpdatingLocation() }

// MARK: - CLLocationManagerDelegate func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { guard let location = locations.last else { return } onLocationUpdate?(location) manager.stopUpdatingLocation() // إيقاف التحديثات إذا كانت هناك حاجة لقيمة واحدة }

func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) { print("خطأ في الحصول على الموقع: \\(error.localizedDescription)") }}

// الاستخدامlet locationManager = LocationManager()locationManager.onLocationUpdate = { location in print("خط العرض: \\(location.coordinate.latitude), خط الطول: \\(location.coordinate.longitude)")}locationManager.requestLocation()


2. MapKit: عرض الخرائط والتعليقات التوضيحية



يتيح MapKit تضمين خرائط Apple Maps التفاعلية في التطبيقات. الفئة الرئيسية هي MKMapView.



2.1. إنشاء خريطة في Storyboard/XIB



أضف MKMapView إلى المشهد وأنشئ IBOutlet في وحدة التحكم. تأكد من استيراد MapKit.



2.2. إنشاء خريطة برمجيًا وإضافة تعليق توضيحي



import MapKit

class MapViewController: UIViewController { var mapView: MKMapView!

override func viewDidLoad() { super.viewDidLoad() setupMap() addAnnotation() }

private func setupMap() { mapView = MKMapView(frame: view.bounds) mapView.autoresizingMask = [.flexibleWidth, .flexibleHeight] view.addSubview(mapView)

// تعيين المنطقة (موسكو) let center = CLLocationCoordinate2D(latitude: 55.751244, longitude: 37.618423) let span = MKCoordinateSpan(latitudeDelta: 0.05, longitudeDelta: 0.05) let region = MKCoordinateRegion(center: center, span: span) mapView.setRegion(region, animated: true) }

private func addAnnotation() { let annotation = MKPointAnnotation() annotation.coordinate = CLLocationCoordinate2D(latitude: 55.751244, longitude: 37.618423) annotation.title = "موسكو" annotation.s

توصيات