모든 준비를 마쳤습니다!

개발을 시작하려면 개발자 문서로 이동하세요.

Google Maps Android API 활성화

개발을 시작하기 위해 Google Developers Console에서 우선적으로 해야 할 일을 몇 가지 소개하겠습니다.

  1. 프로젝트 생성 또는 선택
  2. Google Maps Android API 활성화
  3. 적합한 키 생성
계속

Google Maps Android 마커 클러스터링 유틸리티

마커를 클러스터링하면 지도의 가독성을 해치지 않으면서도 지도에 많은 마커를 넣을 수 있습니다.

소개

이 동영상은 데이터가 지도에서 다수의 데이터 지점이 필요한 경우, 마커를 대신하여 마커 클러스터링을 사용하는 방법을 설명합니다.

마커 클러스터링 유틸리티를 사용하면 다양한 확대/축소 수준에서 여러 개의 마커를 관리할 수 있습니다. 엄밀히 말하면, 이 시점에서 '마커'는 실제로 '항목'이고 렌더링되었을 때만 '마커'가 됩니다. 그러나 혼란을 방지하기 위해 이 문서에서는 이름을 모두 '마커'로 통일합니다.

사용자가 높은 확대/축소 수준에서 지도를 보면, 개별 마커가 지도에 나타납니다. 사용자가 지도를 축소하면, 마커가 클러스터로 모여서 지도를 보기 쉽게 해줍니다. 마커 클러스터링 유틸리티는 Google Maps Android API 유틸리티 라이브러리의 일부입니다. 아직 라이브러리를 설정하지 않았다면 아래 페이지를 읽기 전에 설정 가이드를 참조하세요.

클러스터형 마커가 있는 지도
클러스터링된 마커

마커 클러스터링 유틸리티를 사용하려면 마커를 ClusterItem 객체로 ClusterManager에 추가해야 합니다. ClusterManagerAlgorithm에 마커를 전달하고, Algorithm은 마커를 클러스터 집합으로 변환합니다. ClusterRenderer는 클러스터와 개별 마커를 추가하고 제거하는 방식으로 렌더링을 관리합니다. ClusterRendererAlgorithm은 플러그 가능하고 사용자 지정할 수 있습니다.

유틸리티 라이브러리는 마커 클러스터링 유틸리티의 샘플 구현이 포함된 데모 앱과 함께 제공됩니다. 데모 앱 실행에 관한 도움말은 설정 가이드를 참조하세요. 데모 앱에는 다음 마커 클러스터링 샘플이 포함되어 있습니다.

  • ClusteringDemoActivity: 마커 클러스터링을 보여주는 간단한 액티비티.
  • BigClusteringDemoActivity: 2 000개 마커의 클러스터링.
  • CustomMarkerClusteringDemoActivity: 클러스터형 마커의 사용자 지정 디자인 생성.

간단한 마커 클러스터러 추가

아래 단계에 따라 10개의 마커로 구성된 간단한 클러스터를 생성합니다. 결과는 다음과 유사하게 나타납니다. 표시되는/클러스터링되는 마커 수는 확대/축소 수준에 따라 달라집니다.

10개의 클러스터형 마커가 있는 지도
10개의 클러스터형 마커

다음은 필요한 단계를 요약한 내용입니다.

  1. ClusterItem을 구현하여 지도에 마커를 나타냅니다. 클러스터 항목은 LatLng 객체로 마커의 위치를 반환합니다.
  2. ClusterManager를 추가하고, 확대/축소 수준에 따라 클러스터 항목(마커)을 그룹으로 묶습니다.
  3. ClusterManager는 리스너를 구현하므로 지도의 OnCameraIdleListener()ClusterManager로 설정합니다.
  4. 마커 클릭 이벤트에 응답하는 특정 기능을 추가하고 싶다면, ClusterManager가 리스너를 구현하므로 지도의 OnMarkerClickListener()ClusterManager로 설정합니다.
  5. 마커를 ClusterManager에 공급합니다.

세부 단계: 10개의 마커로 구성된 간단한 클러스터를 생성하려면 먼저 ClusterItem을 구현하는 MyItem 클래스를 생성합니다.

public class MyItem implements ClusterItem {
    private final LatLng mPosition;

    public MyItem(double lat, double lng) {
        mPosition = new LatLng(lat, lng);
    }

    @Override
    public LatLng getPosition() {
        return mPosition;
    }
}

지도 액티비티에서 ClusterManager를 추가하고 여기에 클러스터 항목을 입력합니다. 유형 인수 <MyItem>ClusterManagerMyItem 유형으로 선언한다는 점에 유의하세요.

// Declare a variable for the cluster manager.
private ClusterManager<MyItem> mClusterManager;

private void setUpClusterer() {
    // Position the map.
    getMap().moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(51.503186, -0.126446), 10));

    // Initialize the manager with the context and the map.
    // (Activity extends context, so we can pass 'this' in the constructor.)
    mClusterManager = new ClusterManager<MyItem>(this, getMap());

    // Point the map's listeners at the listeners implemented by the cluster
    // manager.
    getMap().setOnCameraIdleListener(mClusterManager);
    getMap().setOnMarkerClickListener(mClusterManager);

    // Add cluster items (markers) to the cluster manager.
    addItems();
}

private void addItems() {

    // Set some lat/lng coordinates to start with.
    double lat = 51.5145160;
    double lng = -0.1270060;

    // Add ten cluster items in close proximity, for purposes of this example.
    for (int i = 0; i < 10; i++) {
        double offset = i / 60d;
        lat = lat + offset;
        lng = lng + offset;
        MyItem offsetItem = new MyItem(lat, lng);
        mClusterManager.addItem(offsetItem);
    }
}

마커 클러스터 사용자 지정

ClusterManager 생성자는 DefaultClusterRendererNonHierarchicalDistanceBasedAlgorithm을 생성합니다. ClusterManagersetAlgorithm(Algorithm<T> algorithm)setRenderer(ClusterRenderer<T> view) 메서드를 사용하여 ClusterRendererAlgorithm을 변경할 수 있습니다.

ClusterRenderer를 구현하여 클러스터 렌더링을 사용자 지정할 수 있습니다. DefaultClusterRenderer는 훌륭한 시작 기반을 제공합니다. DefaultClusterRenderer의 서브클래스를 생성하여 기본값을 재정의할 수 있습니다.

사용자 지정의 상세한 예시를 보려면 유틸리티 라이브러리와 함께 제공되는 데모 앱에서 CustomMarkerClusteringDemoActivity를 참조하세요.

사용자 지정 클러스터형 마커가 있는 지도
사용자 지정 클러스터형 마커

CustomMarkerClusteringDemoActivity는 자체 클러스터 항목 Person을 정의하고, DefaultClusterRendererPersonRenderer로 확장하는 방식으로 해당 클러스터 항목을 렌더링합니다.

또한, 데모는 ClusterManager.OnClusterClickListener<Person> 인터페이스를 구현하여 클러스터를 클릭했을 때 그 사람에 대한 자세한 정보를 표시하는 방법을 보여줍니다. 유사한 방식으로 ClusterManager.OnClusterItemClickListener<Person>도 구현할 수 있습니다.

데모 앱 실행에 관한 도움말은 설정 가이드를 참조하세요.

다음에 대한 의견 보내기...

Google Maps Android API
Google Maps Android API
도움이 필요하시나요? 지원 페이지를 방문하세요.