본문 바로가기
ios 뽀개기/ios 강좌

ios 지도 mkmap 3 - 해당 주소 지도에 표시하기&현재위치

by 인생여희 2018. 5. 16.
반응형

ios 지도 mkmap 3


이번에는 mkplacemark 와 mkmapitem을 이용해서 텍스트 주소에 해당하는 표시를 지도위에 해보겠다


1. mkplacemark 인스턴스 생성하기


  mkmapitem 클래스를 이용해서 지도를 표시할  나타나는 각각의 위치는 mkplacemark 객체에 의해 표현되어야 한다.


  mkplacemark 객체를 생성할   객체는 주소 속성 정보를 포함하고 있는 nsdictionary 객체와 함께 위치의 지리적 좌표로 초기화 되어야 한다.


        


        //매게 변수로 위도,경도가 들어간다.


        let coords = CLLocationCoordinate2DMake(51.5083, -0.1384)


        


        let address = [CNPostalAddressStreetKey: "181 Piccadilly, St. James's", CNPostalAddressCityKey: "London", CNPostalAddressPostalCodeKey: "W1A 1ER", CNPostalAddressISOCountryCodeKey: "GB"]


        


        //주소 딕셔너리에 nil 값을 전달하여 mkplacemark 객체를 초기화   있다그러나  결과로 지도가 나타날때 현재 위치는 표시되겠지만주소 대신에 unknown이라는 태그가 붙는다.


        //mkplacemark 객체를 생성할때 좌표는 필수 값이다.


        //위치 좌표가 아닌 텍스트 주소를 알고 있는 경우 mkplacemark 인스턴스를 생성하기 전에 좌표를 얻기 위하여 지오코딩이 사용되어야 한다.


        let place = MKPlacemark(coordinate: coords, addressDictionary: address)


        


        // mkmapitem으로 작업


        // mkplacemark 객체를 인자로 전달해서 초기화


        let mapItem = MKMapItem(placemark: place)


 


        //적절한 표시로 목적지를 가리키는 지도를 연다


        mapItem.openInMaps(launchOptions: nil)


결과화면



        //mapItemForCurrentLocation 메서드 호출을 통해 사용자 디바이스의 현재 위치를 표시 수도 있다.

        

        let mapItem2 = MKMapItem.forCurrentLocation()       //현재위치

        

        let mapItems = [mapItem, mapItem2]              //미국위치 하나 표시, 현재 위치 하나 표시

        

        MKMapItem.openMaps(with: mapItems, launchOptions: nil)   //열기


결과 : 오른쪽에 파란점이 나의 위치고, 왼쪽에 빨간색 표지판이 위에 코드로 표시한 미국의 위치다.







#mkmapitem 옵션


1.MKLaunchOptionsDirectionsModeKey 

턴 방식 길찾기를 지도에 제공할지를 제어한다. 단 하나의 placemaker객체만 존재할 경우는 현재 위치에서 그곳까지의 방향이 제공된다. 여러가지 모드가 있는데, MKLaunchOptionsDirectionsModeDriving, MKLaunchOptionsDirectionsModeWalking,MKLaunchOptionsDirectionsModeTransit이 있다.


2.MKLaunchOptionsMapTypeKey 

지도가 표준, 위성, 하이브리드, 플라이오버, 또는 하이브리드 플라이오버 지도 이미지를 표시해야 하는지 가리킨다.


3.MKLaunchOptionsModeCenterKey

지도의 중앙이 되는 위치에 대한 좌표를 포함하는 CLLocationCoordinate2D 구조체 값에 해당한다.


4.MKLaunchOptionsMapSpanKey

실행되면 지도에 표시되어야 하는 영역을 지정하는 MKCoordinateSpan 구조체 값이다.


5.MKLaunchOptionsShowsTrafficKey 

지도가 실행될 때 교통정보를 지도 위에 겹치도록 할 것인지를 가리키는 불리언 값이다.


6.MKLaunchOptionsCameraKey

3D 플라이 오버 모드에서 지도가 표시될 때, 이 키에 할당된 값은 특정 시점에서 지도를 보도록 구성된 MKMapCamera 객체의 형태를 취한다. 


예)


        let options = [MKLaunchOptionsDirectionsModeKey:

            MKLaunchOptionsDirectionsModeDriving, MKLaunchOptionsShowsTrafficKey: true] as [String : Any]

        

        MKMapItem.openMaps(with: mapItems, launchOptions: options)


결과화면


이런식으로 나온다.

또 MKMapItem 클래스에 name, url 등의 속성을 이용하면 지도에 부가적인 정보를 넣을 수 있다.



        let mapItem = MKMapItem(placemark: place)

 

        mapItem.name = "empire state building"

        mapItem.phoneNumber = "1010234"

        mapItem.url = NSURL(string: "http://www.naver.com") as! URL

        mapItem.openInMaps(launchOptions: nil)




지오코딩과 MKPlacemark 와 MKMapItem 클래스를 이용하면 간단한 코드로도 다양한 지도 어플리케이션을 만들 수 있다.







반응형

댓글