Все готово!

Прежде чем приступить к разработке, ознакомьтесь с документацией для разработчиков.

Активация Google Maps Android API

Чтобы помочь вам освоиться, мы покажем, как выполнить некоторые необходимые действия в консоли разработчика Google:

  1. Создание или выбор проекта
  2. Активация Google Maps Android API
  3. Создание соответствующих ключей

Служебная программа Google Maps Android Heatmap

Карты интенсивности применяются для представления распределения и плотности точек данных на карте.

Введение

Библиотека служебных программ Google Maps Android API включает в себя программу для работы с картами интенсивности, которую можно использовать для добавления одной или нескольких карт интенсивности на карту Google в вашем приложении.

В этом видеоролике обсуждается использование карт интенсивности в качестве альтернативы маркерам, когда ваши данные отображаются большим количеством точек на карте.

Карты интенсивности помогают пользователям понять распределение и относительную интенсивность точек данных на карте. Вместо размещения отдельных маркеров для каждого места на картах интенсивности используются цвета, которые представляют распределение данных.

В приведенном ниже примере красным цветом обозначены области с большим количеством полицейских участков в австралийском городе Виктория (Victoria).

Карта с отображением интенсивности расположения полицейских участков
Отображение интенсивности на карте

Если вы еще не настроили библиотеку служебных программ Google Maps Android API, выполните рекомендации руководства по настройке, прежде чем продолжить чтение этой страницы.

Добавление простой карты интенсивности

Чтобы добавить карту интенсивности на свою карту, вам понадобится набор данных, состоящий из координат каждого интересующего вас места. Сначала создайте объект HeatmapTileProvider, передав ему коллекцию объектов LatLng. Затем создайте новое наложение TileOverlay, передав ему поставщика листов карты интенсивности, и добавьте мозаичное наложение на карту.

Служебная программа предоставляет класс HeatmapTileProvider, который реализует интерфейс TileProvider, предоставляющий мозаичные изображения для карты интенсивности. HeatmapTileProvider принимает коллекцию объектов LatLng (или объектов WeightedLatLng, как описывается ниже). Он создает мозаичные изображения для различных уровней масштабирования, исходя из предоставленных параметров радиуса, градиента и прозрачности. Вы можете изменить значения по умолчанию для этих параметров.

Рассмотрим эти шаги более подробно.

  1. Используйте HeatmapTileProvider.Builder(), передав ему коллекцию объектов LatLng, чтобы добавить новый объект HeatmapTileProvider.
  2. Создайте новый объект TileOverlayOptions с соответствующими параметрами, включая HeatmapTileProvider.
  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().weightedData() вместо HeatmapTileProvider.Builder().data().

Настройка карты интенсивности

Многие свойства карты интенсивности можно изменить. Необходимые параметры можно установить при создании с помощью функций Builder. Вы также можете изменить параметр в любое время, вызвав соответствующее средство установки HeatmapTileProvider, а затем очистив кэш листов наложения, чтобы повторно перерисовать все листы с применением новых параметров.

Доступны следующие параметры:

  1. Radius: размер гауссова размытия, применяемого к карте интенсивности, который выражен в пикселях. Значение по умолчанию – 20. Допустимый диапазон значений – от 10 до 50. Используйте параметр radius() построителя Builder, чтобы установить значение при создании карты интенсивности, или измените это значение позже, используя setRadius().
  2. Gradient: цветовая гамма, используемая картой интенсивности для создания своей карты цветов, в диапазоне от минимальной до максимальной интенсивности. Для создания градиента используются два массива: целочисленный массив, содержащий цвета, и массив типа float, указывающий начальную точку для каждого цвета. Последний массив представлен процентными значениями от максимальной интенсивности, которые выражаются дробной величиной от нуля до единицы. Необходимо указать только один цвет для одноцветного градиента или как минимум два цвета для многоцветного градиента. Для создания карты цветов используется интерполяция между этими цветами. По умолчанию градиент включает в себя два цвета. Используйте параметр gradient() построителя Builder, чтобы установить значение при создании карты интенсивности, или измените это значение позже, используя setGradient().
  3. Opacity: Это непрозрачность всего слоя карты интенсивности в диапазоне от нуля до единицы. Значение по умолчанию – 0,7. Используйте параметр opacity() построителя Builder, чтобы установить значение при создании карты интенсивности, или измените это значение позже, используя 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();

Изменение набора данных

Чтобы изменить набор данных, на основе которых создается карта интенсивности, используйте HeatmapTileProvider.setData() или HeatmapTileProvider.setWeightedData() для точек WeightedLatLng. Примечание. Чтобы добавить или удалить точки на карте интенсивности, обновите свою коллекцию данных, а затем используйте 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
Нужна помощь? Обратитесь в службу поддержки.