[iOS][Swift] MapKit

Jay·2023년 10월 19일
0

iOS

목록 보기
46/47

1. MapKit 프레임워크 추가하기

우선, Xcode 프로젝트에서 MapKit 프레임워크를 추가해야 합니다.

2. 지도 표시하기 (MKMapView)

지도를 표시하려면 MKMapView를 사용합니다. ViewController에 지도를 추가하고, 원하는 위치로 지도를 이동시켜 보겠습니다.

import UIKit
import MapKit

class ViewController: UIViewController {

    private var mapView: MKMapView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // MKMapView 초기화 및 뷰에 추가
        mapView = MKMapView(frame: self.view.bounds)
        self.view.addSubview(mapView)
        
        // 지도의 중심 좌표와 줌 레벨 설정
        let center = CLLocationCoordinate2D(latitude: 37.7749, longitude: -122.4194) // San Francisco, CA
        let region = MKCoordinateRegion(center: center, span: MKCoordinateSpan(latitudeDelta: 0.05, longitudeDelta: 0.05))
        mapView.setRegion(region, animated: true)
    }
}

3. 사용자 위치 표시하기

지도에 사용자의 현재 위치를 표시하려면 두 가지 단계를 거쳐야 합니다.

사용자 위치 접근 권한 요청:
Info.plist 파일에 NSLocationWhenInUseUsageDescription 키를 추가하고 사용자에게 위치 접근 권한을 요청하는 메시지를 입력합니다.

지도에 사용자 위치 표시:

mapView.showsUserLocation = true

4. 지도에 주석(Annotation) 추가하기

let annotation = MKPointAnnotation()
annotation.coordinate = CLLocationCoordinate2D(latitude: 37.7749, longitude: -122.4194) // San Francisco, CA
annotation.title = "San Francisco"
annotation.subtitle = "CA"
mapView.addAnnotation(annotation)

5. 위치 검색하기

사용자가 입력한 텍스트를 기반으로 위치를 검색하는 기능을 추가해보겠습니다.

func searchLocation(named name: String) {
    let searchRequest = MKLocalSearch.Request()
    searchRequest.naturalLanguageQuery = name

    let search = MKLocalSearch(request: searchRequest)
    search.start { (response, error) in
        guard let response = response else {
            print("Error: \(error?.localizedDescription ?? "Unknown error")")
            return
        }

        // 검색 결과에서 첫 번째 위치를 지도의 중심으로 설정
        let firstLocation = response.mapItems.first?.placemark.coordinate
        if let location = firstLocation {
            let region = MKCoordinateRegion(center: location, span: MKCoordinateSpan(latitudeDelta: 0.05, longitudeDelta: 0.05))
            self.mapView.setRegion(region, animated: true)
        }
    }
}

6. 경로 찾기

두 위치 사이의 경로를 찾는 기능도 추가할 수 있습니다. 이 기능은 특히 내비게이션 앱에서 유용하게 사용됩니다.

func findRoute(from source: CLLocationCoordinate2D, to destination: CLLocationCoordinate2D) {
    let sourcePlacemark = MKPlacemark(coordinate: source)
    let destinationPlacemark = MKPlacemark(coordinate: destination)

    let directionRequest = MKDirections.Request()
    directionRequest.source = MKMapItem(placemark: sourcePlacemark)
    directionRequest.destination = MKMapItem(placemark: destinationPlacemark)
    directionRequest.transportType = .automobile

    let directions = MKDirections(request: directionRequest)
    directions.calculate { (response, error) in
        guard let response = response else {
            print("Error: \(error?.localizedDescription ?? "Unknown error")")
            return
        }

        // 경로 표시
        let route = response.routes[0]
        self.mapView.addOverlay(route.polyline, level: .aboveRoads)
    }
}

// MKMapViewDelegate 메서드를 사용하여 경로 스타일 지정
func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
    if overlay is MKPolyline {
        let renderer = MKPolylineRenderer(overlay: overlay)
        renderer.strokeColor = UIColor.blue
        renderer.lineWidth = 3.0
        return renderer
    }
    return MKOverlayRenderer()
}
profile
Junior Developer

0개의 댓글