Map Kit Nedir ve Nasıl Kullanılır?

Map Kit Nedir ve Nasıl Kullanılır?

Günümüzde haritaları kullanan çok sayıda mobil uygulama var. Birçok farklı amaç için kullanılan bu haritalar çoğu zaman günümüzün bir parçası oluyor. Bu yüzden her geliştirici için önem arz ediyor. Peki Swift ile Map Kit nasıl kullanılır gelin yakından bakalım.


Uygulamaya Eklemek

Map Kit yapısını kullanmadan önce uygulamaya eklemeliyiz. Bunun için Main.storyboard sayfasına gidelim ve + butonuna tıklayalım. Çıkan ara yüze Map Kit yazalım. Gördükten sonra sürükleyip ViewController ekranımıza bırakalım. Ardından ViewController içerisinde tanımlayalım. TableView yapısında olduğu gibi Map Kit’de de ufak bir delegasyon işlemi yapmalıyız. Bunun için öncelikle MapKit kütüphanesini import edelim. Ardından MKMapViewDelegate sınıfını kalıtım yoluyla uygulamamıza alıyoruz. Son olarak viewDidLoad içerisinde delegasyonu tamamlıyoruz.


Kullanıcı Konumunu Almak

Konum Almak

Kullanıcının konumunu aslında Map Kit ile alamıyoruz. Bunun için CoreLocation kütüphanesini kullanmalıyız. Bu yüzden öncelikle kütüphaneyi import edelim.

import CoreLocation

Ardından CLLocationManagerDelegate sınıfını kalıtım yolu ile uygulamamıza ekliyoruz. Bu sayede bu sınıfa ait bütün fonksiyonları kullanabileceğiz.

Class ViewController : UIViewController, MKMapViewDelegate, CLLocationManagerDelegate

Core Location ile konum almak için öncelikle bir CLLocationManager() objesi oluşturmalıyız.

var locationManager = CLLocationManager()

Artık konumu almaya geçebiliriz. Bunun için viewDidLoad içerisine girelim ve öncelikle delegasyonu tamamlayalım.

locationManager.delegate = self

Ardından konum hassasiyetini belirleyelim. Fakat burada dikkat etmeliyiz ki seçeceğimiz hassasiyet cihaz piline doğrudan etki eder. Yani siz ne kadar hassas konum almak isterseniz cihazın bataryası o kadar hızlı azalır.

locationManager.desiredAccuracy = kCLLocationAccuracyBest

Şimdi ise bu konumu ne zaman kullanacağımızı belirlemekte. Bunu istersek her zaman veya sadece uygulamayı kullanırken olarak ayarlayabiliriz.  Fakat ayarlama yapıldıktan sonra Info.plist dosyası üzerinden kullanıcıdan izin almak gerekir. Bu sayede standartlara uygun bir kullanım yapılabilir.

locationManager.requestWhenInUseAuthorization()

Gelelim artık konum almayı başlatmaya.

locationManager.startUpdatingLocation()

Kullanıcının anlık konumunu almak işte bu kadar kolay. Fakat aldığımız bu konumu şimdi ne yapacağız. Tabi ki de kullanıcıya göstereceğiz. Şimdi gelin biraz ona bakalım.


Konumu Kullanıcıya Göstermek

Konumu kullanıcıyı Gösterme

Alınan konumu kullanıcıya göstermek için özel bir fonksiyon kullanacağız. Bu fonksiyon Core Location tarafından bize sunulan bir fonksiyon. Bu fonksiyon bize alınan konumları bir CLLocation dizisi olarak veriyor. Bizim görevimizde aslında buradaki ilk verinin enlem ve boylamını almak. Aldıktan sonra bir de zoom seviyesi oluşturmak. Peki bunları neden yapıyoruz. Aslında oldukça basit. Harita üzerinde konumu gösterebilmek için bir region oluşturmanız gerekli. Bu region içinde bir location ve span yani zoom seviyesi gerekli. İşte burada yürütmemiz gereken mantık bu. Peki nasıl uygulanır gelin ona bakalım.

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
        
    let location = CLLocationCoordinate2D(latitude: locations[0].coordinate.latitude, longitude: locations[0].coordinate.longitude)
    let span = MKCoordinateSpan(latitudeDelta: 0.05, longitudeDelta: 0.05)
    let region = MKCoordinateRegion(center: location, span: span)
    mapView.setRegion(region, animated: true)
     
}

Görüldüğü gibi işlem tamam. Artık cihaz üzerinde kullanıcı konumunu rahatlıkla görebilir. Unutmadan bir not paylaşmak isterim. Belirlediğimiz span seviyesini sizler istediğiniz gibi ayarlayabilirsiniz. Ne kadar küçük bir sayı kullanırsanız konuma o kadar daha yakın bir görüntü alırsınız.


Haritaya Yer İşareti Eklemek

Bazen bulunduğumuz veya tekrar gitmek istediğimiz bir konumu harita üzerinde işaretleriz. Bu sayede konum kayıtlı bir şekilde durur ve  istediğimiz zaman ulaşabiliriz. Aslında işlem oldukça basit. Kullanıcı istediği konuma dokunarak basılı tutar. İki veya üç saniye sonra ekranda kırmızı bir iğne görünür. Peki bu işlem sırasında arka tarafta neler oluyor gelin biraz buna bakalım.


İlk önce kullanıcının uzun dokunuşunu algılamak için bir GestureRecognizer oluşturmalıyız. Fakat burada kullanacağımız selector fonksiyon normalden biraz farklı olacak. Zaten bunu birazdan göreceğiz. Bir de kaç saniye basılı tutmamız gerektiğini ayarlayacağız. Ardından mapView’a ekledikten sonra işlem tamam.

let gestureRecognizer = UILongPressGestureRecognizer(target: self, action: #selector(chooseLocation(gestureRecognizer:)))
gestureRecognizer.minimumPressDuration = 3
mapView.addGestureRecognizer(gestureRecognizer)

Şimdi gelelim selector fonksiyonumuza. Bu fonksiyonumuz içerisine bir girdi alacak. Bu girdi bir UILongPressGestureRecognizer olacak.

@objc func chooseLocation(gestureRecognizer: UILongPressGestureRecognizer) {

}

Şimdi gelelim bunun içerisine. Öncelikle basma işleminin başlayıp başlamadığını kontrol edelim.

@objc func chooseLocation(gestureRecognizer: UILongPressGestureRecognizer) {

	if gestureRecognizer.state == .began {


        }
}

Şimdi ise önce kullanıcının tıkladığı konumu almalı ve sonra bu konumun koordinatlarına ulaşmalıyız.

@objc func chooseLocation(gestureRecognizer: UILongPressGestureRecognizer) {

	if gestureRecognizer.state == .began {
		
		let touchedPoint = gestureRecognizer.location(in : self.mapView)
                let touchedPointCoordinates = self.mapView.convert(touchedPoint,toCoordinateFrom: self.mapView)
     }
}

Dokunulan noktayı ve bu noktanın enlem ve boylam değerlerini aldık. Sıra geldi ekranda çıkan kırmızı iğneye. Bu işleme Swift de “Annotation” deniyor. Şimdi bizde bir annotation oluşturalım.

@objc func chooseLocation(gestureRecognizer: UILongPressGestureRecognizer) {

	if gestureRecognizer.state == .began {
		
		let touchedPoint = gestureRecognizer.location(in : self.mapView)
                let touchedPointCoordinates = self.mapView.convert(touchedPoint,toCoordinateFrom: self.mapView)
                let annotation = MKPointAnnotation()
                annotation.coordinate = touchedPointCoordinates
                annotation.title = “Yeni Yer İşareti”
                annotation.subtitle = “Map Kit Kullanımı”
                self.mapView.addAnnotation(annotation)

     }
}

Görüldüğü gibi annotation’a koordinatı verdikten sonra bir başlık ve alt başlık verdik. Siz kendi istediğinize göre tabi ki de kişiselleştirebilirsiniz. Daha birçok özelliği bulunan bu yapının kullanımı kimi zaman büyük bir önem arz ediyor. Eğer bununla ilgili bir örneğe ihtiyacınız olursa buradan erişebilirsiniz.

İnternet sitesi https://synta-x.com
Yazı oluşturuldu 30

Benzer yazılar

Aramak istediğinizi üstte yazmaya başlayın ve aramak için enter tuşuna basın. İptal için ESC tuşuna basın.