본문 바로가기

iOS

[swift] 카카오 맵 api 사용해보기

 

* 참고: http://apis.map.kakao.com/ios/guide/

 

- xcode 11.6 

- swift5

1. 준비사항

- sdk 다운로드

- 개발자 등록, 앱 플랫폼 추가하여 app key발급 , bundle id 등록

- 프로젝트에 프레임워크 추가

 

- 프로젝트의 info.plist

  : app key추가

  : Privacy - Location When In Use Usage Description 추가

 

- 헤더 생성

( sdk가 objective-c 기반으로 만들어졌기 때문에 swift프로젝트에서 쓰려면 bridging 헤더가 필요하다. 가이드에 안나와 있음ㅠㅠ )

#ifndef Header_h
#define Header_h

#import <DaumMap/MTMapView.h>

#endif /* Header_h */

 

- Build Setting - Swift compiler - Objective-C Bridging Header 에 헤더 경로추가  (  ./(프로젝트명)/Header.h )

 

2. 소스 코드 

네이버맵과 다르게 카카오맵은 swift 소스코드를 제공하지 않는다...

그나마 definition을 눌러보면 어느 정도 정리되어 있음

 

- 소스 코드 예시

import UIKit

public let DEFAULT_POSITION = MTMapPointGeo(latitude: 37.576568, longitude: 127.029148)
class MapViewController: UIViewController, MTMapViewDelegate {
    
    var mapView: MTMapView?
    
    var mapPoint1: MTMapPoint?
    var poiItem1: MTMapPOIItem?
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // 지도 불러오기
        mapView = MTMapView(frame: self.view.bounds)
        
        if let mapView = mapView {
            mapView.delegate = self
            mapView.baseMapType = .standard
            
            // 지도 중심점, 레벨
            mapView.setMapCenter(MTMapPoint(geoCoord: DEFAULT_POSITION), zoomLevel: 4, animated: true)
            
            // 현재 위치 트래킹
            mapView.showCurrentLocationMarker = true
            mapView.currentLocationTrackingMode = .onWithoutHeading
            
            // 마커 추가
            self.mapPoint1 = MTMapPoint(geoCoord: MTMapPointGeo(latitude:  37.585568, longitude: 127.019148))
            poiItem1 = MTMapPOIItem()
            poiItem1?.markerType = MTMapPOIItemMarkerType.bluePin
            poiItem1?.mapPoint = mapPoint1
            poiItem1?.itemName = "아무데나 찍어봄"
            mapView.add(poiItem1)
            
//            mapView.addPOIItems([poiItem1,poiItem2] 
//            mapView.fitAreaToShowAllPOIItems()
            
            self.view.addSubview(mapView)
        }
        
    }
    
    
    // Custom: 현 위치 트래킹 함수
    func mapView(_ mapView: MTMapView!, updateCurrentLocation location: MTMapPoint!, withAccuracy accuracy: MTMapLocationAccuracy) {
        let currentLocation = location?.mapPointGeo()
        if let latitude = currentLocation?.latitude, let longitude = currentLocation?.longitude{
            print("MTMapView updateCurrentLocation (\(latitude),\(longitude)) accuracy (\(accuracy))")
        }
    }
    
    func mapView(_ mapView: MTMapView?, updateDeviceHeading headingAngle: MTMapRotationAngle) {
        print("MTMapView updateDeviceHeading (\(headingAngle)) degrees")
    }
    
}



 

마커와 현재 위치 모두 잘 나온다~!~!

네이버맵과 비교했을 때 덜 무거운 느낌이지만

대신 ui가 비교적 올드하고 줌레이블이라던가 트래킹모드onoff 버튼등 자잘한 기능은 스스로 구현해야 될게 많은 듯하다