반응형
블로그 이미지
개발자로서 현장에서 일하면서 새로 접하는 기술들이나 알게된 정보 등을 정리하기 위한 블로그입니다. 운 좋게 미국에서 큰 회사들의 프로젝트에서 컬설턴트로 일하고 있어서 새로운 기술들을 접할 기회가 많이 있습니다. 미국의 IT 프로젝트에서 사용되는 툴들에 대해 많은 분들과 정보를 공유하고 싶습니다.
솔웅

최근에 받은 트랙백

글 보관함

[Swift] 현재 위치 맵에 표시하기

2015. 9. 13. 17:28 | Posted by 솔웅


지난 글에 스위프트로 현재 위치 정보를 얻어서 다루는 방법에 대해 공부했습니다.

이번엔 현재 위치를 가지고 맵에 표시하는 방법을 공부해 보겠습니다.


오늘도 VEA Software의 강좌를 가지고 공부했습니다.


https://www.veasoftware.com/tutorials/2015/7/25/map-view-current-location-in-swift-xcode-7-ios-9-tutorial


이것은 xcode 7 으로 작업했더라구요. 그래서 소스를 받아서 6.4 에서 돌리니까 에러가 났습니다.

그래서 7.1 beta를 설치해서 거기서 돌리니까 제대로 돌아가더라구요.


그런데 이전에 작업했던 걸 불러오니까 자기가 Convert 시켰는데도 실행이 안되네요.

애플의 개발 툴도 아주 안정적이지는 않은 것 같아요.



하여간 일단 소스코드를 보겠습니다.


import UIKit
import MapKit
import CoreLocation

class ViewController: UIViewController, MKMapViewDelegate, CLLocationManagerDelegate
{
    @IBOutlet weak var mapView: MKMapView!
   
    let locationManager = CLLocationManager()
   
    override func viewDidLoad()
    {
        super.viewDidLoad()
       
        self.locationManager.delegate = self
        self.locationManager.desiredAccuracy = kCLLocationAccuracyBest
        self.locationManager.requestWhenInUseAuthorization()
        self.locationManager.startUpdatingLocation()
       
        self.mapView.showsUserLocation = true
       
    }

    override func didReceiveMemoryWarning()
    {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    // MARK: - Location Delegate Methods
   
    func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation])
    {
        let location = locations.last
       
        let center = CLLocationCoordinate2D(latitude: location!.coordinate.latitude, longitude: location!.coordinate.longitude)
        let region = MKCoordinateRegion(center: center, span: MKCoordinateSpan(latitudeDelta: 1, longitudeDelta: 1))
       
        self.mapView.setRegion(region, animated: true)
       
        self.locationManager.stopUpdatingLocation()
    }
   
    func locationManager(manager: CLLocationManager, didFailWithError error: NSError)
    {
        print("Error: " + error.localizedDescription, terminator: "")
    }
   
}


CoreLocation과 관련된 것은 이전 글에서 다뤘으니까 여기서 따로 다루지는 않겠고...


맵을 사용하려면 우선 MapKit 을 import 하고 CLLocationManagerDelegate를 클래스에 추가합니다.


그리고 화면에 맵을 표시해야 하니까 Main.storyBoard 를 사용해서 MapView를 스크린에 얹고 변수 mapView 를 선언합니다.


다음에 viewDidLoad 메소드에 CLLocationManager()를 사용해 구현한 4개의 라인 밑에 맵뷰의 showsUserLocation을 true로 세팅합니다.


이러면 사용자 위치를 보여줄 수 있도록 사전 준비가 다 된 겁니다.


다음은 CLLocationManagerDelegate의 didUpdateLocations 메소드를 구현합니다.

이 메소드 안을 보면 우선 가장 최근의 위치정보를 location 에 담구요 


Core Location의 Data Type 중 하나인 CLLocationCoordinate2D를 사용합니다.

이 데이터 타입에는 CLLocationAccuracy, CLLocationDegrees, CLLocationDirection, CLLocationDistance 그리고 CLLocationSpeed 등이 있습니다.


CLLocationCoordinate2D는 위도와 경도 정보를 받는 겁니다.

이 위도 경도 정보를 center라는 변수에 담습니다.



다음은 MKCoordinateRegion 을 사용합니다. 이것은 MapKit의 데이터 타입중 하나입니다.

이외에 MKCoordinateSpan, MKMapPoint, MKMapSize, MKMapRect, MKZoomScale 등이 있습니다.


MKCoordinateRegion은 위도 경도에 해당하는 지역을 맵의 중앙에 위치하고 MKCoordinateSpan 은 지도의 scale을 정할 수 있습니다.


이렇게 region을 완료하면 그 다음에 이 region을 mapView 에 세팅을 하면 됩니다.

이때 animated는 true로 선언하구요.


그리고 나서 locationManager의 stopUpdatingLocation()을 호출해서 업데이트를 중지시킵니다.


이렇게 하면 지도에 현재의 위치를 표시하게 됩니다.





반응형

Comment

이전 1 2 3 4 5 6 7 8 9 다음