iOS SDK 소개
iOS가 설치된 스마트폰의 App구현시 사용할 수 있는 API입니다.
Object-C 언어를 지원하며 지도를 컨트롤하고 지도상에 정보를 표출하는데 사용되는 기능을 제공합니다.
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]; }
원내부 색상변경
- (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]; } }