지도에 그리기
지도 위에 정보를 표현하기 위한 다양한 그래픽 요소들에 대해 이해합니다.
1. 지도에 그리기 위한 API
카카오지도 SDK 는 지도 위에 표시 할 수 있는 Label, Shape, RouteLine, MapWidget 이라는 크게 4가지 타입의 기능을 제공합니다. 이 API 들은 각각 아래와 같은 패턴으로 클래스가 구성으로 되어 있습니다.
- 모든 컨트롤의 진입점이 되는 Manager 클래스
- Object 가 되는 클래스들을 묶어서 관리할 수 있는 Layer 클래스
- 개별적으로 하나씩 컨트롤 할 수 있는 Objects 클래스
Manager | Layer | Objects | |
---|---|---|---|
Label | LabelManager | LabelLayer, LodLabelLayer | Label, LodLabel, PolylineLabel |
Shape | ShapeManager, DimScreenManager | ShapeLayer, DimScreenLayer | Polygon, Polyline |
RouteLine | RouteLineManager | RouteLineLayer | RouteLine |
MapWidget | MapWidgetManager | MapWidgetLayer, InfoWindowLayer | MapWidget, InfoWindow |
Manager 클래스들은 직접 생성할 수 없고 KakaoMap 에서 아래와 같이 가져옵니다.
// Label
LabelManager labelManager = kakaoMap.getLabelManager();
// Shape
ShapeManager shapeManager = kakaoMap.getShapeManager();
// RouteLine
RouteLineManager routeLineManager = kakaoMap.getRouteLineManager();
// MapWidget
MapWidgetManager mapWidgetManager = kakaoMap.getMapWidgetManager();
2. 렌더링 우선순위
지도 위 Label, Shape, RouteLine, MapWidget 간에 겹쳐서 보여져야 할 때 어떤 것이 위 또는 아래로 보여질지 렌더링 우선순위는 고정되어 있습니다.
렌더링 우선순위 | ||
---|---|---|
MapWidget | 가장 위에 위치한다. | 4 |
Label | Shape, RouteLine 보다 위에 MapWidget 보다는 아래에 위치한다. | 3 |
RouteLine | Shape 보다 위에 Label, MapWidget 아래에 위치한다. | 2 |
Shape | 가장 아래에 위치한다. | 1 |
3. 스타일 설정
MapWidget 을 제외하고 Label, RouteLine, Shape 은 색깔, 이미지, 두께 등을 가지고 있는 스타일을 설정해서 지도에 표시할 수 있습니다. 스타일은 지도의 줌 레벨마다 다르게 설정 할 수 있고 스타일 관련 API 는 아래와 같은 패턴으로 구성되어 있습니다.
1. 클래스 이름이 —Style 로 끝날 때: 줌 레벨 마다 설정할 수 있는 스타일 API 의 최소 단위 클래스
2. 클래스 이름이 —Styles 로 끝날 때: —Style 스타일 객체를 1개 이상 갖고있는 컨테이너 클래스
3. 클래스 이름이 —StylesSet 로 끝날 때: —Styles 스타일 객체를 1개 이상 갖고있는 컨테이너 클래스
Object 별 스타일 API | |||
---|---|---|---|
Label | LabelStyle, PolylineLabelStyle | LabelStyles, PolylineLabelStyles | 없음 |
Shape | PolygonStyle, PolylineStyle | PolygonStyles, PolylineStyles | PolygonStylesSet, PolylineStylesSet |
RouteLine | RouteLineStyle | RouteLineStyles | RouteLineStylesSet |
- 스타일 클래스 간의 집합 관계 그림
지도의 줌 레벨 마다 스타일 다르게 설정
Label, Shape, RouteLine, MapWidget 들은 지도의 줌 레벨마다 다른 스타일로 설정할 수 있습니다.
아래의 예제코드와 그림은 줌 레벨마다 다른 스타일을 설정하는 Label 예제 입니다.
// Min ZoomLevel ~ 7 까지 : 스타일 안나옴
// 8 ~ 10 까지 : red_marker 이미지 나옴
// 11 ~ 14 까지 : blue_marker 이미지 나옴
// 15 ~ Max ZoomLevel 까지 : blue_marker 이미지와 텍스트 나옴
LabelStyles styles = LabelStyles.from("myStyleId",
LabelStyle.from(R.drawable.red_marker).setZoomLevel(8),
LabelStyle.from(R.drawable.blue_marker).setZoomLevel(11),
LabelStyle.from(R.drawable.blue_marker).setTextStyles(32, Color.BLACK, 1, Color.GRAY).setZoomLevel(15));
// 라벨 스타일 추가
styles = kakaoMap.getLabelManager().addLabelStyles(styles);
// 라벨 생성
Label label = kakaoMap.getLabelManager().getLayer().addLabel(LabelOptions.from(pos)
.setStyles(styles).setTexts("★맛있는 치킨★", "123-4567"));
Min Level ~ 7 | 8 ~ 10 | 11 ~ 14 | 15 ~ Max Level |
---|---|---|---|
스타일 없음 |