아미(아름다운미소)

swift 맵 뷰로 지도 나타내기2(위도와 경도로 원하는 위치 표시하기) 본문

랭귀지/SWIFT

swift 맵 뷰로 지도 나타내기2(위도와 경도로 원하는 위치 표시하기)

유키공 2018. 1. 31. 13:30

위도와 경도로 원하는 위치 표시하기


[해당 소스]

    func goLocation(latitude latitudeValue: CLLocationDegrees, longitude longitudeValue : CLLocationDegrees, delta span :Double) {

        //위도 값과 경도 값을 매개변수로 하여 CLLocationCoordinate2DMake 함수를 호출하고, 리턴값을 pLocation로 받습니다.

        let pLocation = CLLocationCoordinate2DMake(latitudeValue, longitudeValue)

        //범위 값을 매개변수로 하여 MKCoordinateSpanMake함수를 호출하고, 리턴 값을 spanValue로 받습니다.

        let spanValue = MKCoordinateSpanMake(span, span)

        //pLocation와 spanValue를 매개변수로 하여 MKCoordinateRegionMake 함수를 호출하고, 리턴 값을 pRegion으로 받습니다.

        let pRegion = MKCoordinateRegionMake(pLocation, spanValue)

        //pRegion을 매개변수로하여 myMap.setRegion 함수를 호출합니다.

        myMap.setRegion(pRegion, animated: true)

    }

    

    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {

        //위치가 업데이트되면 먼저 마지막 위치 값을 찿아냅니다.

        let pLocation = locations.last

        //마지막 위치의 위도와 경도 값을 가지고 앞에서 만든 goLocation함수를 호출 합니다.이때 delta를 0.01로 하였으니 1의 값보다 지도를 100배로 확대해서 보여 줄 것입니다.

        goLocation(latitude: (pLocation?.coordinate.latitude)!, longitude: (pLocation?.coordinate.longitude)!, delta: 0.01)

    }


[전체소스]

import UIKit

import MapKit


class ViewController: UIViewController, CLLocationManagerDelegate{

    @IBOutlet weak var myMap: MKMapView!

    let locationManager = CLLocationManager()

    

    override func viewDidLoad() {

        super.viewDidLoad()

        //상수 locationManager의 델리게이트를 self로 설정합니다.

        locationManager.delegate = self

        //정확도를 최고로 설정합니다.

        locationManager.desiredAccuracy = kCLLocationAccuracyBest

        //위치 데이터를 추적하기 위해 사용자에게 승인을 요구합니다.

        locationManager.requestWhenInUseAuthorization()

        //위치 업데이트를 시작합니다.

        locationManager.startUpdatingLocation()

        //위치보기 값을 true로 설정합니다.

        myMap.showsUserLocation = true

    }


    override func didReceiveMemoryWarning() {

        super.didReceiveMemoryWarning()

    }


    func goLocation(latitude latitudeValue: CLLocationDegrees, longitude longitudeValue : CLLocationDegrees, delta span :Double) {

        //위도 값과 경도 값을 매개변수로 하여 CLLocationCoordinate2DMake 함수를 호출하고, 리턴값을 pLocation로 받습니다.

        let pLocation = CLLocationCoordinate2DMake(latitudeValue, longitudeValue)

        //범위 값을 매개변수로 하여 MKCoordinateSpanMake함수를 호출하고, 리턴 값을 spanValue로 받습니다.

        let spanValue = MKCoordinateSpanMake(span, span)

        //pLocation와 spanValue를 매개변수로 하여 MKCoordinateRegionMake 함수를 호출하고, 리턴 값을 pRegion으로 받습니다.

        let pRegion = MKCoordinateRegionMake(pLocation, spanValue)

        //pRegion을 매개변수로하여 myMap.setRegion 함수를 호출합니다.

        myMap.setRegion(pRegion, animated: true)

    }

    

    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {

        //위치가 업데이트되면 먼저 마지막 위치 값을 찿아냅니다.

        let pLocation = locations.last

        //마지막 위치의 위도와 경도 값을 가지고 앞에서 만든 goLocation함수를 호출 합니다.이때 delta를 0.01로 하였으니 1의 값보다 지도를 100배로 확대해서 보여 줄 것입니다.

        goLocation(latitude: (pLocation?.coordinate.latitude)!, longitude: (pLocation?.coordinate.longitude)!, delta: 0.01)

    }

    

}


[결과화면]

결과화면



Comments