Swift CoreLocation使用❗️ – 定位與地圖操作教學

Swift CoreLocation 是一個可以讓開發者取得使用者位置的框架,可以讓開發者在 App 中加入定位與地圖操作的功能,讓 App 更加完整。本文將介紹如何使用 Swift CoreLocation 來取得使用者位置,並且將位置顯示在地圖上。

CoreLocation 基本概念

CoreLocation 是一個用來取得使用者位置的框架,可以取得使用者的經緯度,並且可以將經緯度轉換成地址,也可以將地址轉換成經緯度。

CoreLocation 實作

首先,我們需要在 info.plist 中加入 Privacy – Location When In Use Usage Description,這個欄位是用來讓使用者知道 App 將會取得使用者位置,並且讓使用者同意取得位置的訊息。

接著,我們需要在 ViewController 中加入 CLLocationManager,並且設定 delegate,讓 ViewController 可以接收 CLLocationManager 的回傳訊息。

接著,我們需要在 ViewController 中加入 MKMapView,並且設定 delegate,讓 ViewController 可以接收 MKMapView 的回傳訊息。

最後,我們需要在 ViewController 中實作 CLLocationManagerDelegateMKMapViewDelegate 的方法,讓 ViewController 可以接收 CLLocationManagerMKMapView 的回傳訊息,並且將取得的位置顯示在地圖上。

CLLocationManagerDelegate 實作

首先,我們需要在 ViewController 中實作 CLLocationManagerDelegate 的方法,讓 ViewController 可以接收 CLLocationManager 的回傳訊息,並且將取得的位置顯示在地圖上。

首先,我們需要在 ViewController 中加入 CLLocationManager,並且設定 delegate,讓 ViewController 可以接收 CLLocationManager 的回傳訊息。

let locationManager = CLLocationManager()
locationManager.delegate = self

接著,我們需要在 ViewController 中實作 CLLocationManagerDelegate 的方法,讓 ViewController 可以接收 CLLocationManager 的回傳訊息,並且將取得的位置顯示在地圖上。

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
    guard let location = locations.last else { return }
    let center = CLLocationCoordinate2D(latitude: location.coordinate.latitude, longitude: location.coordinate.longitude)
    let region = MKCoordinateRegion.init(center: center, latitudinalMeters: regionInMeters, longitudinalMeters: regionInMeters)
    mapView.setRegion(region, animated: true)
}

最後,我們需要在 ViewController 中呼叫 CLLocationManagerrequestWhenInUseAuthorization 方法,讓使用者可以同意取得位置的訊息。

locationManager.requestWhenInUseAuthorization()

MKMapViewDelegate 實作

接著,我們需要在 ViewController 中加入 MKMapView,並且設定 delegate,讓 ViewController 可以接收 MKMapView 的回傳訊息。

let mapView = MKMapView()
mapView.delegate = self

接著,我們需要在 ViewController 中實作 MKMapViewDelegate 的方法,讓 ViewController 可以接收 MKMapView 的回傳訊息,並且將取得的位置顯示在地圖上。

func mapView(_ mapView: MKMapView, regionDidChangeAnimated animated: Bool) {
    let center = getCenterLocation(for: mapView)
    let geoCoder = CLGeocoder()

    guard let previousLocation = self.previousLocation else { return }

    guard center.distance(from: previousLocation) > 50 else { return }
    self.previousLocation = center

    geoCoder.reverseGeocodeLocation(center) { [weak self] (placemarks, error) in
        guard let self = self else { return }

        if let _ = error {
            //TODO: Show alert informing the user
            return
        }

        guard let placemark = placemarks?.first else {
            //TODO: Show alert informing the user
            return
        }

        let streetNumber = placemark.subThoroughfare ?? ""
        let streetName = placemark.thoroughfare ?? ""

        DispatchQueue.main.async {
            self.addressLabel.text = "\(streetNumber) \(streetName)"
        }
    }
}

func getCenterLocation(for mapView: MKMapView) -> CLLocation {
    let latitude = mapView.centerCoordinate.latitude
    let longitude = mapView.centerCoordinate.longitude

    return CLLocation(latitude: latitude, longitude: longitude)
}

結論

本文介紹了如何使用 Swift CoreLocation 來取得使用者位置,並且將位置顯示在地圖上。我們需要在 info.plist 中加入 Privacy – Location When In Use Usage Description,並且在 ViewController 中加入 CLLocationManagerMKMapView,並且實作 CLLocationManagerDelegateMKMapViewDelegate 的方法,讓 ViewController 可以接收 CLLocationManagerMKMapView 的回傳訊息,並且將取得的位置顯示在地圖上。

推薦閱讀文章

Swift CoreLocation使用教學 – AppCoda
Core Location Tutorial for iOS: Tracking Visited Locations – Ray Wenderlich
How to track a user’s location with Core Location – Hacking with Swift
Core Location Tutorial with Swift – iOScreator
MapKit Tutorial: Getting Started – Ray Wenderlich</a

延伸閱讀本站文章

更多swift相關文章

推薦學習youtube影片

Swift CoreLocation使用❗️ - 定位與地圖操作教學

Categorized in:

Tagged in:

,