Polygon
지도에 원, 삼각형, 사각형 등 닫힌 도형을 표시할 수 있습니다.
Shape 에는 일련의 연결 된 선분으로 표시하는 Polyline 과 닫힌 도형을 표시하는 Polygon 클래스가 있습니다. 이것들을 통칭하여 Shape 이라고 정의합니다. 아래의 다양한 도형과 스타일의 Shape 들은 샘플 프로젝트 에서 예제코드를 확인 할 수 있습니다.
지도에 선형의 정보를 그리는 방법으로 Polyline 과 RouteLine 두 가지가 있습니다. RouteLine 은 LOD(Level of Detail) 기능이 적용되어 있어 지도의 확대/축소 줌레벨이 바뀔 때마다 최적화 되어 선형의 형태와 스타일이 달라 질 수 있고, Polyline 은 그렇지 않아 형태와 스타일을 유지합니다. 많은 양의 포인트를 그려야 하는 경로(길찾기라인)를 표현할 때는 성능 상 RouteLine 을 쓰는 것이 좋습니다.
ShapeManager 는 Shape 과 관련 된 최상위 클래스이며 ShapeLayer 와 ShapeAnimator 의 생성 및 삭제, Shape 과 관련 된 객체관리를 하는 컨테이너 역할을 합니다. 아래의 예제코드는 ShapeManager 를 가져오는 방법입니다.
// ShapeManager 를 가져오는 방법
kakaoMap.getShapeManager();
ShapeLayer 는 Polygon 과 Polyline 의 생성 및 삭제와 같은 객체관리를 하는 컨테이너 역할을 합니다. 뿐만 아니라, zOrder 값을 이용해 ShapeLayer 간에 Shape 들이 겹칠 때 어떤 것이 보여지게 할 지 렌더링 우선순위를 설정할 수 있고, VectorLayerPass 값을 이용해 Shape 이 지도의 Overlay 와 RouteLine 사이에서 어떤 순서로 그려질 지 렌더링 우선순위를 설정 할 수 있습니다.
ShapeLayer 는 ShapeManager 에 미리 생성 된 디폴트 ShapeLayer 를 사용하는 방법과 사용자가 직접 ShapeLayer 를 생성해서 사용하는 2가지 방법이 있습니다.
// 1. ShapeManager 에 미리 생성 된 디폴트 ShapeLayer 가져오는 방법
shapeManager.getLayer();
// 2. 사용자 커스텀으로 ShapeLayer 생성 및 가져오는 방법
shapeManager.addLayer(ShapeLayerOptions.from("myShape", 10001, VectorLayerPass.Default));
Shape 들 간에 또는 다른 그래픽 오브젝트들과 겹쳐질 때, 어떤 것을 겹치게 보여지게 할지 설정 할 수 있습니다. 기본적으로 지도의 렌더링 우선순위 안에서 동작합니다.
VectorLayerPass | Description |
---|---|
Default | 별도로 지정하지 않는경우 default 로 지정됨. zOrder 10000 이상을 권장하며, 지도와 배경 사이에 들어갈 수 있음. |
Overlay | 지도 배경보다 무조건 위에 그려지고 zOrder 에 따라 특정 Overlay 밑으로 내려갈 수 있다. zOrder 10000 이상을 권장. |
Route | Route 라인 및 패턴보다 위에 그려지는 PassType. 지도 배경/Overaly/RouteLine 보다 무조건 위에 그려진다. |
ShapeAnimator 를 이용하여 Shape 에 애니메이션 효과를 줄 수 있습니다. 현재 Shape 에 지원되고 있는 Animation 은 CircleWaves 만 있습니다. CircleWaves 애니메이션은 CircleWave 의 컨테이너 역할을 합니다.
Property | Description |
---|---|
Interpolation | 애니메이션의 보간 방법. 종류로는 Linear, CubicIn, CubicOut, CubicInOut |
duration | 애니메이션의 전체 길이 (단위 millis) |
repeatCount | 애니메이션의 반복 횟수 |
hideShapeAtStop | 애니메이션 효과가 종료 후 Shape 을 사라지게 할 지 여부 |
CircleWave | CircleWave 애니메이션 |
Property | Description |
---|---|
startAlpha | 애니메이션이 시작 할 때의 알파값 |
endAlpha | 애니메이션이 끝날 때의 알파값 |
startRadius | 애니메이션 시작 할 때의 반지름 값(px). 1.0 권장 |
endRadius | 애니메이션 종료 할 때의 반지름 값(px). 1.0 권장 |
zoomLevel | 애니메이션이 나오기 시작하는 최소 줌레벨 |
ShapeAniamtor 는 Polyline 도 똑같이 적용됩니다.
// 1. AnimationOptions 설정
CircleWaves circleWaves = CircleWaves.from("CircleWaveAnimatorId")
.setRepeatCount(3)
.setDuration(1000)
.setInterpolation(Interpolation.CubicIn)
.addCircleWave(CircleWave.from(0.7f, 0.0f, 0.0f, 100.0f));
// 2. ShapeAnimator 생성
ShapeAnimator animator = shapeManager.addAnimator(circleWaves);
// 3. 애니메이션을 적용 할 Shape 준비
Polygon circle = layer.addPolygon(getCircleOptions(LatLng.from(37.3849851, 127.1174393), 1));
// 4. ShapeAnimator 에 Shape 추가
animator.addPolygons(circle);
// 5. 애니메이션 시작
animator.start();