İçeriğe geç

MKDirections ile Rota Çizme işlemi

Merhabalar bu yazımda İOS Serilerimden MapKit ile önemli bir konu olan harita üzerinde iki adet nokta arasında nasıl yol çizeriz bunun örneğini göstereceğim.

Rota çizme işlemi harita uygulamalarında sıkca kullanılır. Bu işlem için MapKit kütüphanesinde bulunan MKDirections sınıfı işimizi görmektedir. Tabi bununla beraber görselleştirme için renderer kullanacağız.

Lafı fazla uzatmadan yazdığım kod örneğini paylaşayım.

import UIKit
import MapKit
import CoreLocation

class ViewController: UIViewController,MKMapViewDelegate,CLLocationManagerDelegate {

    @IBOutlet weak var mView: MKMapView!
    let locationManager = CLLocationManager()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        locationManager.delegate = self
        mView.delegate = self
        
        setupmm()
        
    }
    

    func setupmm() {
        
        let sourceLocation = CLLocationCoordinate2D(latitude: 40.759011, longitude: -73.984472)
        let destinationLocation = CLLocationCoordinate2D(latitude: 40.748441, longitude: -73.985564)
        
        let sourcePlacemark = MKPlacemark(coordinate: sourceLocation, addressDictionary: nil)
        let destinationPlacemark = MKPlacemark(coordinate: destinationLocation, addressDictionary: nil)
        
        let sourceMapItem = MKMapItem(placemark: sourcePlacemark)
        let destinationMapItem = MKMapItem(placemark: destinationPlacemark)
        
        let sourceAnnotation = MKPointAnnotation()
        sourceAnnotation.title = "Times Square"
        
        if let location = sourcePlacemark.location {
            sourceAnnotation.coordinate = location.coordinate
        }
        
        let destinationAnnotation = MKPointAnnotation()
        destinationAnnotation.title = "Empire State Building"
        
        if let location = destinationPlacemark.location {
            destinationAnnotation.coordinate = location.coordinate
            
        }
        
        
        mView.showAnnotations([sourceAnnotation,destinationAnnotation], animated: true )
        
        
        let directionRequest = MKDirectionsRequest()
        directionRequest.source = sourceMapItem
        directionRequest.destination = destinationMapItem
        directionRequest.transportType = .walking
        
        let directions = MKDirections(request: directionRequest)
        
        directions.calculate { (response, error) in
            if error != nil {
                return
            }
            
            let route = response?.routes[0]
            self.mView.add((route?.polyline)!, level: MKOverlayLevel.aboveRoads)
            
            let rect = route?.polyline.boundingMapRect
            self.mView.setRegion(MKCoordinateRegionForMapRect(rect!), animated: true)
            
            print("\((route?.expectedTravelTime)! / 60) minute walking distance")
        }
        
        
    }
    
    func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
        
        let renderer = MKPolylineRenderer(overlay: overlay)
        renderer.strokeColor = UIColor.green
        renderer.lineWidth = 4.0
        
        
        return renderer
    }
    

    
}//

MKDirectionsRequest sınıfı yardımıyla gidilecek noktayı ve başlangıç noktasını belirtmeniz gerekir. Bununla birlikte transportType ile yürüme,araba,otobüs gibi farklı ulaşım tiplerini seçebilirsiniz.

MKDirections sınıfına verdiğimiz request nesnesinden sonra yolumuzu calculete ediyoruz. Ve ilk rotamızı seçip bu rotaya polyLine ekliyoruz (Haritada çizgi). Bu çizgi işlemini delegate’de bulunan MKOverlayRenderer nesnesi döndüren fonksiyon ile MKPolylineRenderer sınıfı ile çizgi çizme işlemimizi tamamlıyoruz.

route nesnesi içerisinde source ile destination arasında tahmini varış süresi,uzaklık gibi yararlı bilgiler bulunmaktadır. Bu sayede bilgileri kendinizin hesaplamasına gerek yok.

Yeni yazılarda görüşmek üzere 😉

Tarih:iOSMapKit

Bu yazı yorumlara kapalı.

Copyright © 2020 Kenan Atmaca