iOS SDK 소개

iOS가 설치된 스마트폰의 App구현시 사용할 수 있는 API입니다.
Object-C 언어를 지원하며 지도를 컨트롤하고 지도상에 정보를 표출하는데 사용되는 기능을 제공합니다.

주요기능 소개

아래의 표는 모바일 SDK에서 제공하는 주요 기능에 대한 설명입니다.
각 항목들에 대한 설명과 사용법은 다음과 같습니다.

분류 기능 설명
기본사항 지도생성 지도를 표출하는 가장 기본 기능
지도 확대/축소 화면 터치 및 컨트롤바 조작을 통해 표출되는 지도를 좀더 확대/축소 하는 기능
오버레이 폴리라인 생성 폴리라인 생성 기능 제공
폴리라인 색상 변경 폴리라인 색상 변경 기능 제공
폴리곤 생성 폴리곤 생성 기능 제공
폴리곤 색상 변경 폴리곤 내부 색상 변경 기능 제공
마커 생성 마커 생성 기능 제공
커스텀 마커 생성 커스텀 마커 생성 기능 제공
원 생성 원 생성 기능 제공
원내부 색상변경 원내부 색상변경 기능 제공
인포 윈도우 생성 인포 윈도우 생성 기능 제공
사각형 생성 사각형 생성 기능 제공
사격형 내부 색상 변경 사각형 내부 색상 변경 기능 제공
이벤트 지도 터치 지도화면을 짧게 누를 경우 발생
지도 롱 터치 지도화면을 길게 누를 경우 발생
오버레이 이벤트 오버레이된 객체를 누를 경우 발생

지도생성

지도생성을 하는 클래스는 MapView입니다.
해당 클래스를 이용하여 지도 생성 및 지도 동작에 대한 전반적인 기능들을 수행할 수 있습니다.
생성된 MapView 객체를 이용하여 view가 로드 된 뒤에 지도 데이터를 가져오면 됩니다. 지도 데이터를 가져오기 위해서는 발급받은 인증키를 설정하여야 하며 맵 인증이 성공적으로 완료되면 XML 파일을 읽어와서 맵 서비스가 시작 됩니다. 인증이 실패되면 적절한 예외처리를 수행하여 실패이유에 대해서 표시해 줍니다

예제 소스

		                    - (void)viewDidLoad {
							[super viewDidLoad];
							MapView* mapView = [[MapView alloc] init];
							mapView.delegate  = self;
							
							NSString *consumerKey = @"--";  //전달받은 서비스ID 입력
							NSString *consumerSecret = @"--"; //전달받은 서비스Secret 입력
							
							//지도 실행 요청
							
							    [mapView startMapService: consumerKey consumerSecret: consumerSecret];
							    
							    //지도 세팅이 정상적으로 이루어져있는지 확인할 수 있는 메소드
							    // 0 - 세팅 준비,
							    // 1 - 세팅 실패,
							    // 2 - 재시도 중,
							    // 3 - 정상적으로 세팅 완료
							
							NSLog(@”check: %d” [mapview checkStartMapService]);
                      	

실행결과

지도제공

지도 확대 / 축소

화면을 touch하여 drag 하거나 ZOOM 버튼을 이용하여 지도 화면을 확대 또는 축소할 수 있습니다.
MapView로 선언된 객체에 setZoomLevel로 원하는 줌 레벨 값을 세팅하여 지도를 확대 또는 축소 시킵니다.

예제 소스

		                   - (IBAction)zoomIn: (id)sender {
								int zoomin = mapView.zoomLevel;    //현재의 줌 레벨을 가져 옴.
								zoomin++;                          //줌 레벨을 증가 시킴.
								[mapView setZoomLevel: zoomin];     //새로운 줌 레벨을 설정한다.
							}
							
							- (IBAction)zoomOut: (id)sender {
								int zoomout = mapView.zoomLevel;    //현재의 줌 레벨을 가져 옴.
								Zoomout--;                           //줌 레벨을 감소 시킴.
								[mapView setZoomLevel: zoomout];     //새로운 줌 레벨을 설정한다.
							}
                      	

실행결과

지도확대축소 지도확대축소

폴리라인 생성

지도 위에 선을 그릴 때 사용합니다.
하나의 선 또는 여러 개의 선을 한 번에 그릴 수 있도록 제공되고 있습니다.

예제 소스

			                    - (IBAction)addpolyLine: (id)sender {
							    CoordList* coordList = [[[CoordList alloc] init] autorelease];
							    double size=100;
							    Coord coord = mapView.centerCoordinate; //지도 중심 좌표를 가져 옴.
							
							//선들의 시작과 끝점 좌표를 입력한다.
							
							[coordList addCoord:CoordMake(coord.x-size,coord.y-size)]; 
							[coordList addCoord:CoordMake(coord.x+size,coord.y-size)];
							[coordList addCoord:CoordMake(coord.x+size,coord.y+size)];
							[coordList addCoord:CoordMake(coord.x-size,coord.y+size)];
							    
							//폴리라인 오버레이 객체를 생성한다.
							
							PolylineOverlay* overlay = [[PolylineOverlay alloc] initWithCoordList:coordList];
							overlay.lineWidth =2; //선의 굵기 설정.
							    overlay.lineType = LineType_Dash;  //점선 또는 선 타입 설정.
							overlay.delegate = self;
							
							[mapView addOverlay:overlay]; //지도에 오버레이를 추가한다.
							[overlay release];
							}
                      	

실행결과

폴리라인 생성

폴리라인 색상 변경

생성된 PolylineOverlay의 객체를 이용하여 선의 색상을 변경 시킬 수 있습니다.
선의 색상은 iOS framework에서 제공하고 있는 CGColorRef를 이용하여 변경 합니다.

예제 소스

		                    - (IBAction)addpolyLine: (id)sender {
							    CoordList* coordList = [[[CoordList alloc] init] autorelease];
							    double size=100;
							    Coord coord = mapView.centerCoordinate; //지도 중심 좌표를 가져 옴.
							
							//선들의 시작과 끝점 좌표를 입력한다.
							
							[coordList addCoord:CoordMake(coord.x-size,coord.y-size)]; 
							[coordList addCoord:CoordMake(coord.x+size,coord.y-size)];
							[coordList addCoord:CoordMake(coord.x+size,coord.y+size)];
							[coordList addCoord:CoordMake(coord.x-size,coord.y+size)];
							    
							//폴리라인 오버레이 객체를 생성한다.
							
							PolylineOverlay* overlay = [[PolylineOverlay alloc] initWithCoordList:coordList];
							overlay.lineWidth =2; //선 굵기 설정.
							    overlay.lineType = LineType_Dash;  //점선 또는 선 타입 설정.
							overlay.delegate = self;
							
							CGColorSpaceRef rgb = CGColorSpaceCreateDeviceRGB();
							CGColorRef stroke = CGColorCreate(rgb, (CGFloat[]){1,0,0,1});  //선 색상 설정
							    overlay.strokeColor = stroke;
							    CGColorSpaceRelease(rgb);
							    CFRelease(stroke);
							
							[mapView addOverlay:overlay]; //지도에 오버레이를 추가한다.
							[overlay release];
							}
                      	

실행결과

폴리라인 색상 변경

폴리곤 생성

지도 위에 다각형을 그릴 때 사용합니다. 입력되는 좌표 값을 이용하여 삼각형, 사각형, 다각형을 그릴 수 있습니다.

예제 소스

		                    - (IBAction) addPolygon:(id)sender
							{
							CoordList* coordList = [[[CoordList alloc] init] autorelease];
							double size =90;
							Coord coord = mapView.centerCoordinate; //지도 중심 좌표를 가져 옴.
							
							//선들의 시작과 끝점 좌표를 입력한다.
							
							[coordList addCoord:CoordMake(coord.x-size,coord.y-size)];
							[coordList addCoord:CoordMake(coord.x+size,coord.y-size)];
							[coordList addCoord:CoordMake(coord.x+size,coord.y+size)];
							
							//폴리곤 오버레이 객체를 생성한다.
							
							PolygonOverlay* overlay = [[PolygonOverlay alloc] initWithCoordList:coordList];
							overlay.lineWidth =2; //다각형의 선의 굵기 설정.
							overlay.delegate = self;
							    
							[mapView addOverlay:overlay]; //지도에 오버레이를 추가한다.
							[overlay release];
							}
                      	

실행결과

폴리곤 생성

폴리곤 색상 변경

생성된 PolygonOverlay의 객체를 이용하여 다각형 선의 색상 및 내부 색상과 투명도를 변경 시킬 수 있습니다.
색상은 iOS framework에서 제공하고 있는 CGColorRef를 이용하여 변경 합니다.

예제 소스

		                    - (IBAction) addPolygon:(id)sender
							{
							CoordList* coordList = [[[CoordList alloc] init] autorelease];
							double size =90;
							Coord coord = mapView.centerCoordinate; //지도 중심 좌표를 가져 옴.
							
							//선들의 시작과 끝점 좌표를 입력한다.
							
							[coordList addCoord:CoordMake(coord.x-size,coord.y-size)];
							[coordList addCoord:CoordMake(coord.x+size,coord.y-size)];
							[coordList addCoord:CoordMake(coord.x+size,coord.y+size)];
							
							//폴리곤 오버레이 객체를 생성한다.
							
							PolygonOverlay* overlay = [[PolygonOverlay alloc] initWithCoordList:coordList];
							overlay.lineWidth =2; //다각형의 선의 굵기 설정.
							overlay.delegate = self;
							    
							//다각형 외부 선의 색상(RGB) 설정
							
							CGColorSpaceRef rgb = CGColorSpaceCreateDeviceRGB(); 
							CGColorRef stroke = CGColorCreate(rgb, (CGFloat[]){0,0,1,1}); 
							    overlay.strokeColor = stroke;
							    
							//다각형안의 내부 색상(RGB) 및 투명도(alpha) 설정
							 
							    CGColorRef fill = CGColorCreate(rgb, (CGFloat[]){1,1,0,0.4}); 
							    overlay.fillColor = fill;
							    
							    CGColorSpaceRelease(rgb);
							    CFRelease(stroke);   
							    CFRelease(fill);
							
							[mapView addOverlay:overlay]; //지도에 오버레이를 추가한다.
							[overlay release];
							}
                      	

실행결과

폴리곤 색상 변경

마커 생성

지도 위의 특정위치에 Marker를 표시하려고 할 때 사용합니다. 해당 객체는 기본으로 설정된 이미지를 사용합니다.

예제 소스

		                    - (IBAction) addMarker:(id)sender
							{
							
							//마커 오버레이 객체를 생성한다.
							
							MarkerOverlay* overlay = [[MarkerOverlay alloc] initWithType:0];
							overlay.coord = mapView.centerCoordinate; //마커를 표시할 좌표를 설정.
							overlay.delegate = self;
							    
							[mapView addOverlay:overlay]; //지도에 오버레이를 추가한다.
							[overlay release];
							}
                      	

실행결과

마커

커스텀 마커 생성

지도 위의 특정위치에 이미지를 표시하려고 할 때 사용합니다.

예제 소스

			                - (IBAction) addImage:(id)sender
						{
						
						//이미지 오버레이 객체를 생성한다.
						
						ImageOverlay* overlay = [[ImageOverlay alloc] initWithImage:
						[UIImage imageNamed:@"smile.png"]];
						overlay.coord = mapView.centerCoordinate; //이미지를 표시할 좌표를 설정.
						overlay.delegate = self;
							
						[mapView addOverlay:overlay]; //지도에 오버레이를 추가한다.
						[overlay release];
						}
                      	

실행결과

커스텀 마커

원 생성

지도 위에 원을 그리려고 할 때 사용합니다. 입력되는 좌표 값과 반경을 이용하여 원을 그립니다.

예제 소스

		                - (IBAction) addCircle:(id)sender
						{
						
						//Circle 오버레이 객체를 생성한다.
						//원의 중심 좌표와 반경을 설정한다.
						
						CircleOverlay* overlay = [[CircleOverlay alloc] 
						initWithCoord:mapView.centerCoordinate Radius:100];
						overlay.lineWidth =1; //선 굵기 설정.
						overlay.delegate = self;
						
						[mapView addOverlay:overlay]; //지도에 오버레이를 추가한다.
						[overlay release];
						}
                      	

실행결과

원 생성

원내부 색상변경

원내부 색상변경

생성된 CircleOverlay의 객체를 이용하여 원의 색상 및 내부 색상과 투명도를 변경 시킬 수 있습니다.
색상은 iOS framework에서 제공하고 있는 CGColorRef를 이용하여 변경 합니다.

예제 소스

			                - (IBAction) addCircle:(id)sender
							{
							
							//Circle 오버레이 객체를 생성한다.
							//원의 중심 좌표와 반경을 설정한다.
							
							CircleOverlay* overlay = [[CircleOverlay alloc] 
							initWithCoord:mapView.centerCoordinate Radius:100];
							overlay.lineWidth =1; //선 굵기 설정.
							overlay.delegate = self;
							
							//원의 외부 선의 색상(RGB) 설정

							CGColorSpaceRef rgb = CGColorSpaceCreateDeviceRGB();   
							CGColorRef stroke = CGColorCreate(rgb, (CGFloat[]){0,1,0,1});    
							    overlay.strokeColor = stroke;
							    
							//원의 내부 색상(RGB) 및 투명도(alpha) 설정
							
							    CGColorRef fill = CGColorCreate(rgb, (CGFloat[]){0,1,1,0.4});
							    overlay.fillColor = fill;
							    
							    CGColorSpaceRelease(rgb);
							    CFRelease(stroke);   
							    CFRelease(fill);
							
							[mapView addOverlay:overlay]; //지도에 오버레이를 추가한다.
							[overlay release];
							}
                      	

실행결과

원내부 색상변경

인포 윈도우 생성

생성된 Overlay의 객체를 이용하여 Overlay를 touch할 때 인포윈도우를 지도화면에 보여지게 할 수 있습니다.
인포윈도우에 들어갈 텍스트와 화면에 보일지 여부를 설정해 주면 됩니다.우에 들어갈 텍스트와 화면에 보일지 여부를 설정해 주면 됩니다.

예제 소스

			                - (IBAction) addMarker:(id)sender
						{
						
						//마커 오버레이 객체를 생성한다.
						
						MarkerOverlay* overlay = [[MarkerOverlay alloc] initWithType:0];
						overlay.coord = mapView.centerCoordinate; //마커를 표시할 좌표를 설정.
						overlay.delegate = self;
						    
						overlay.title = @"User InforWindow";//인포윈도우의 텍스트 설정.
						overlay.canShowInforWindow = YES; //인포윈도우 표시 설정.
						
						[mapView addOverlay:overlay]; //지도에 오버레이를 추가한다.
						[overlay release];
						}
                      	

실행결과

인포 윈도우 생성

사각형 생성

지도 위에 사각형을 그리려고 할 때 사용합니다. 입력되는 좌표 값을 이용하여 사각형을 그립니다.

예제 소스

			                 - (IBAction) addRectangle:(id)sender
							{
							
							//사각형을 그릴 좌표를 설정한다.
							//사각형의 왼쪽 위, 오른쪽 아래 좌표를 설정하여 입력한다.
							
							double size = 150;
							    Coord leftTopCoord = CoordMake(mapView.centerCoordinate.x-size, 
							mapView.centerCoordinate.y-size);
							    Coord rightBottomCoord = CoordMake(mapView.centerCoordinate.x+size, 
							mapView.centerCoordinate.y+size);
							    
							//Rectangle 오버레이 객체를 생성한다.
							
							    RectangleOverlay* overlay = [[RectangleOverlay alloc] 
							initWithCoord:leftTopCoord Coord:rightBottomCoord];
							    overlay.lineWidth =3; //선 굵기 설정.
							    overlay.delegate = self;
							    
							    [mapView addOverlay:overlay]; //지도에 오버레이를 추가한다.
							    [overlay release];
							}
                      	

실행결과

사각형 생성

사각형 내부 색상 변경

생성된 RectangleOverlay의 객체를 이용하여 사각형의 색상 및 내부 색상과 투명도를 변경 시킬 수 있습니다.
색상은 iOS framework에서 제공하고 있는 CGColorRef를 이용하여 변경 합니다.

예제 소스

			                - (IBAction) addRectangle:(id)sender
							{
							
							//사각형을 그릴 좌표를 설정한다.
							//사각형의 왼쪽 위, 오른쪽 아래 좌표를 설정하여 입력한다.

							double size = 150;
							    Coord leftTopCoord = CoordMake(mapView.centerCoordinate.x-size, 
							mapView.centerCoordinate.y-size);
							    Coord rightBottomCoord = CoordMake(mapView.centerCoordinate.x+size, 
							mapView.centerCoordinate.y+size);
							    
							//Rectangle 오버레이 객체를 생성한다.
							
							RectangleOverlay* overlay = [[RectangleOverlay alloc] 
							initWithCoord:leftTopCoord Coord:rightBottomCoord];
							    overlay.lineWidth =3; //선 굵기 설정.
							    overlay.delegate = self;
							    
							//사각형의 외부 선의 색상(RGB) 설정
							
							CGColorSpaceRef rgb = CGColorSpaceCreateDeviceRGB();   
							CGColorRef stroke = CGColorCreate(rgb, (CGFloat[]){0,1,1,1});    
							    overlay.strokeColor = stroke;
							    
							//사각형의 내부 색상(RGB) 및 투명도(alpha) 설정
							
							    CGColorRef fill = CGColorCreate(rgb, (CGFloat[]){1,0,0,0.8});
							    overlay.fillColor = fill;
							    
							    CGColorSpaceRelease(rgb);
							    CFRelease(stroke);   
							    CFRelease(fill);
							
							    [mapView addOverlay:overlay]; //지도에 오버레이를 추가한다.
							    [overlay release];
							}
                      	

실행결과

사각형 내부 색상 변경

지도 터치

iOS framework에서 제공되고 있는 touch event들을 이용하여 지도 화면 touch시에 이벤트들을 제공한다.

예제 소스

			                //지도화면 touch 시 발생 이벤트.
							
							- (void)mapTouched:(MapView*)_mapView Events:(UIEvent*)event
							{
							
							//지도화면 touch 시 화면 중심의 지도 좌표를 알림 창으로 보이기 위한 예제
							
							Coord outcoord = [mapView convertCoordinate:_mapView.centerCoordinate 
							inCoordType:CoordType_UTMK outCoordType:CoordType_WGS84];
							 
							    UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"map touch"
							    message:[NSString stringWithFormat:@"x : %f, y : %f", outcoord.x, outcoord.y]
							                                           delegate:nil
							                                   cancelButtonTitle:nil
							                                   otherButtonTitles:@"OK",nil];
							    [alert show];
							    [alert release];
							}
							
							//지도화면 touch 시작 시 발생 이벤트
							
							- (void)mapTouchBegan:(MapView*)_mapView Events:(UIEvent*)event
							{
								NSLog(@"mapTouchBegan\n");
							}
							
							//지도화면 touch 종료 시 발생 이벤트
							
							- (void)mapTouchEnded:(MapView*)_mapView Events:(UIEvent*)event
							{
								NSLog(@"mapTouchEnded\n");
							}
							
							//지도화면 touch 되어 이동 시 발생 이벤트
							
							- (void)mapTouchMoved:(MapView*)_mapView Events:(UIEvent*)event
							{
								NSLog(@"mapTouchMoved\n");
							}
                      	

실행결과

지도터치 / 롱터치

지도 롱 터치

지도화면을 일정시간 동안 계속 touch를 유지하고 있으면 해당 이벤트가 발생된다.

예제 소스

			                //지도화면 long touch 시 발생 이벤트.
							
							- (void)mapLongTouched:(NSValue *)coord
							{
							
							//지도화면 long touch 시 touch하고 있는 영역의 지도 좌표를 반환한다.
							
							Coord tmp;
							[coord getValue:&tmp];
							    
							    Coord outcoord = [mapView convertCoordinate:tmp 
							inCoordType:CoordType_UTMK outCoordType:CoordType_WGS84];
							    
							    UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"long touch"
							      message:[NSString stringWithFormat:@"x : %f, y : %f", outcoord.x, outcoord.y]
							                                           delegate:nil
							                                   cancelButtonTitle:nil
							                                   otherButtonTitles:@"OK",nil];
							    [alert show];
							    [alert release];
							}
                      	

실행결과

지도터치 / 롱터치

오버레이 터치 이벤트

지도 위에 오버레이된 객체의 터치시 OverlayEventListener 에서 해당 이벤트를 구현할 수 있습니다.
아래의 예제는 overlay touch시 이벤트를 Toast로 표시하는 예제입니다.

예제 소스

			                - (void)overlayTouched:(Overlay *)_overlay
							{
							if(_overlay.tag ==1) //객체생성시 설정한 태그를 확인한다.
							{
							
							//InforWindow 객체 생성한다.
							
							InforWindowOverlay* overlay = [[InforWindowOverlay alloc] 
							initWithOwner:_overlay Size:CGSizeMake(184,67)];
								overlay.coord = _overlay.coord; //표시할 지도 좌표 설정.
								UIView* overlayView = [overlay overlayView];
								
								//InforWindow 이미지 설정.
								
								UIImageView* imageView = [[UIImageView alloc] initWithImage:
							
							[UIImage imageNamed:@"defaultInforWindow.png"]];
								imageView.userInteractionEnabled = YES;
								[overlayView addSubview:imageView]; //이미지 추가.
								
								//Button event 추가.
								
								UIButton* callOutButton = [UIButton buttonWithType:UIButtonTypeCustom];
								callOutButton.frame = CGRectMake(11, 6, 163, 36);
								[imageView addSubview:callOutButton];
								[callOutButton addTarget:self action:@selector(onInforWindowButton:) 
							
							forControlEvents:UIControlEventTouchUpInside];
								
								//InforWindow 텍스트 설정.
								
								UILabel* label = [[UILabel alloc] initWithFrame:CGRectMake(10,10,140,20)];
								label.text = @"터치 InforWindow";
								label.textAlignment = NSTextAlignmentCenter;
								label.backgroundColor = [UIColor clearColor];
								label.textColor = [UIColor greenColor];
								[callOutButton addSubview:label];
								[label release];
								
								[mapView addOverlay:overlay]; //지도에 오버레이를 추가한다.
								[overlay release];
							}
							}
                      	

실행결과

오버레이 터치 이벤트