모든 준비를 마쳤습니다!

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

Google Maps Android API 활성화

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

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

Google Maps Android 열지도 유틸리티

열지도는 지도에 데이터 지점의 분포와 밀도를 표현하는 데 유용합니다.

소개

Google Maps Android API 유틸리티 라이브러리에는 애플리케이션에서 Google 지도에 하나 이상의 열지도를 추가하는 데 사용할 수 있는 열지도 유틸리티가 포함되어 있습니다.

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

열지도를 사용하면 뷰어가 지도에서 데이터 지점의 분포와 상대적 강도를 쉽게 이해할 수 있습니다. 열지도는 각 위치에 마커를 배치하는 대신 색상을 사용하여 데이터의 분포를 나타냅니다.

아래 예시에서 빨간색은 오스트레일리아 빅토리아에서 경찰서가 집중된 영역을 나타냅니다.

경찰서 위치를 보여주는 열지도가 있는 지도
지도의 열지도

아직 Google Maps Android API 유틸리티 라이브러리를 설정하지 않았다면 아래 페이지를 읽기 전에 설정 가이드를 참조하세요.

간단한 열지도 추가

지도에 열지도를 추가하려면 각 관심 위치의 좌표로 구성된 데이터 집합이 필요합니다. 먼저 HeatmapTileProvider를 생성하고 LatLng 객체 컬렉션에 전달합니다. 그런 다음 새 TileOverlay를 생성하여 열지도 타일 제공자에 전달하고, 지도에 타일 오버레이를 추가합니다.

이 유틸리티는 HeatmapTileProvider 클래스를 제공합니다. 이 클래스는 TileProvider 인터페이스를 구현하여 열지도의 타일 이미지를 제공합니다. HeatmapTileProviderLatLng 객체(또는 아래 설명된 것처럼 WeightedLatLng 객체) 컬렉션을 적용합니다. 제공된 반경, 그라데이션 및 투명도 옵션에 따라 다양한 확대/축소 수준의 타일 이미지를 생성합니다. 이 옵션의 기본값을 변경할 수 있습니다.

세부 단계:

  1. HeatmapTileProvider를 추가하려면 HeatmapTileProvider.Builder()를 사용하여 LatLng 객체 컬렉션에 전달합니다.
  2. HeatmapTileProvider를 포함한 관련 옵션으로 새 TileOverlayOptions 객체를 생성합니다.
  3. GoogleMap.addTileOverlay()를 호출하여 지도에 오버레이를 추가합니다.
private void addHeatMap() {
    List<LatLng> list = null;

    // Get the data: latitude/longitude positions of police stations.
    try {
        list = readItems(R.raw.police_stations);
    } catch (JSONException e) {
        Toast.makeText(this, "Problem reading list of locations.", Toast.LENGTH_LONG).show();
    }

    // Create a heat map tile provider, passing it the latlngs of the police stations.
    mProvider = new HeatmapTileProvider.Builder()
        .data(list)
        .build();
    // Add a tile overlay to the map, using the heat map tile provider.
    mOverlay = mMap.addTileOverlay(new TileOverlayOptions().tileProvider(mProvider));
}

private ArrayList<LatLng> readItems(int resource) throws JSONException {
    ArrayList<LatLng> list = new ArrayList<LatLng>();
    InputStream inputStream = getResources().openRawResource(resource);
    String json = new Scanner(inputStream).useDelimiter("\\A").next();
    JSONArray array = new JSONArray(json);
    for (int i = 0; i < array.length(); i++) {
        JSONObject object = array.getJSONObject(i);
        double lat = object.getDouble("lat");
        double lng = object.getDouble("lng");
        list.add(new LatLng(lat, lng));
    }
    return list;
}

예를 들어, 데이터는 JSON 파일인 police_stations.json에 저장됩니다. 다음은 파일에서 추출한 데이터입니다.

[
{"lat" : -37.1886, "lng" : 145.708 } ,
{"lat" : -37.8361, "lng" : 144.845 } ,
{"lat" : -38.4034, "lng" : 144.192 } ,
{"lat" : -38.7597, "lng" : 143.67 } ,
{"lat" : -36.9672, "lng" : 141.083 }
]

가중치가 적용된 경도/위도 지점 사용

HeatmapTileProvider를 생성하는 경우, 이를 가중치가 적용된 경도/위도 좌표 컬렉션에 전달할 수 있습니다. 특정 위치 집합의 중요도를 표현하고자 할 때 유용한 방법입니다.

특정 위치에 가중치를 적용하려면:

  1. 가중치가 필요한 각 위치에 새 WeightedLatLng를 생성합니다. LatLng 및 필요한 강도를 나타내는 double에 전달합니다. 강도는 이 위치의 상대적 중요도 또는 값을 나타냅니다. 값이 높을수록 열지도 그라데이션에서 더 높은 강도의 색상으로 나타납니다. 기본적으로 가장 높은 강도의 색상은 빨간색입니다.
  2. HeatmapTileProvider.Builder().data() 대신 HeatmapTileProvider.Builder().weightedData()를 호출하여 열지도를 생성합니다.

열지도 사용자 지정

다양한 열지도 속성을 사용자 지정할 수 있습니다. 생성 시에 Builder 함수를 통해 옵션을 설정할 수 있습니다. 또는 언제든지 HeatmapTileProvider에서 관련 setter를 호출하여 옵션을 변경한 다음, 오버레이의 타일 캐시를 삭제하여 새로운 옵션으로 모든 타일을 다시 그릴 수 있습니다.

사용할 수 있는 옵션은 다음과 같습니다.

  1. Radius: 열지도에 적용되는 가우시안 블러(Gaussian blur)의 크기, 픽셀 기준. 기본값은 20입니다. 값은 10~50 사이여야 합니다. 열지도를 생성할 때 빌더의 radius()를 사용하여 값을 설정하거나 나중에 setRadius()로 값을 변경합니다.
  2. Gradient: 열지도가 컬러 지도를 생성할 때 사용하는 색상 범위로, 가장 낮은 강도에서 가장 높은 강도까지입니다. 그라데이션은 2개의 배열(색상을 포함하는 정수 배열과 각 색상의 시작 지점을 나타내는 부동 소수점 배열)을 사용하여 생성되며, 최대 강도의 백분율로 지정되고, 0과 1 사이의 분수로 표현됩니다. 단색 그라데이션에는 하나의 색상만 지정하거나 다색 그라데이션에는 2개 이상의 색상을 지정해야 합니다. 컬러 지도는 이러한 색상 간에 보간을 사용하여 생성됩니다. 기본 그라데이션은 2개의 색상을 가집니다. 열지도를 생성할 때 빌더의 gradient()를 사용하여 값을 설정하거나 나중에 setGradient()로 값을 변경합니다.
  3. Opacity: 전체 열지도 계층의 투명도로, 범위는 0과 1 사이입니다. 기본값은 0.7입니다. 열지도를 생성할 때 빌더의 opacity()를 사용하여 값을 설정하거나 나중에 setOpacity()로 값을 변경합니다.

예를 들어, 열지도에 추가하기 전에 Gradient를 생성하여 그라데이션을 설정합니다.

// Create the gradient.
int[] colors = {
    Color.rgb(102, 225, 0), // green
    Color.rgb(255, 0, 0)    // red
};

float[] startPoints = {
    0.2f, 1f
};

Gradient gradient = new Gradient(colors, startPoints);

// Create the tile provider.
mProvider = new HeatmapTileProvider.Builder()
     .data(mList)
     .gradient(gradient)
     .build();

// Add the tile overlay to the map.
mOverlay = mMap.addTileOverlay(new TileOverlayOptions().tileProvider(mProvider));

기존 열지도의 투명도를 변경하려면:

  mProvider.setOpacity(0.7);
  mOverlay.clearTileCache();

데이터 집합 변경

열지도 제작에 사용되는 데이터 집합을 변경하려면 WeightedLatLng 지점에 대해 HeatmapTileProvider.setData() 또는 HeatmapTileProvider.setWeightedData()를 사용합니다. 참고: 열지도에 지점을 추가하거나 열지도에서 지점을 제거하려면 데이터 컬렉션을 업데이트한 다음 setData() 또는 setWeightedData()를 사용합니다.

  ArrayList<WeightedLatLng> data = new ArrayList<WeightedLatLng>();
  mProvider.setData(data);
  mOverlay.clearTileCache();

열지도 제거

다음 열지도를 추가했다고 가정합시다.
mProvider = new HeatmapTileProvider.Builder.data(data).build();
mOverlay = mMap.addTileOverlay(new
    TileOverlayOptions().tileProvider(mProvider));

열지도를 제거하려면 타일 오버레이를 제거해야 합니다.

mOverlay.remove();

데모 앱 보기

열지도 구현의 다른 예시를 보려면 유틸리티 라이브러리와 함께 제공되는 데모 앱에서 HeatmapsDemoActivity를 참조하세요. 설정 가이드는 데모 앱을 실행하는 방법을 보여줍니다.

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

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