Как скрывать объекты на карте с помощью стиля

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

Стилизация работает только на карте типа normal. Она не распространяется на схемы зданий, поэтому планы зданий по-прежнему будут появляться на карте, даже если вы настроите стили для скрытия объектов.

Передача объекта стиля JSON на карту

Чтобы применить стиль к карте, вызовите метод GoogleMap.setMapStyle(), передав объект MapStyleOptions, который содержит определения стиля в формате JSON. JSON можно загрузить из произвольного необработанного ресурса или строки, как показано в следующих примерах.

Произвольный необработанный ресурс

В следующем примере кода предполагается, что ваш проект содержит необработанный ресурс под названием style_json:

/**
 * A styled map using JSON styles from a raw resource.
 */
public class MapsActivityRaw extends AppCompatActivity
        implements OnMapReadyCallback {

    private static final String TAG = MapsActivityRaw.class.getSimpleName();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // Retrieve the content view that renders the map.
        setContentView(R.layout.activity_maps_raw);

        // Get the SupportMapFragment and register for the callback
        // when the map is ready for use.
        SupportMapFragment mapFragment =
                (SupportMapFragment) getSupportFragmentManager()
                        .findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);
    }

    /**
     * Manipulates the map when it's available.
     * The API invokes this callback when the map is ready for use.
     */
    @Override
    public void onMapReady(GoogleMap googleMap) {

        try {
            // Customise the styling of the base map using a JSON object defined
            // in a raw resource file.
            boolean success = googleMap.setMapStyle(
                    MapStyleOptions.loadRawResourceStyle(
                            this, R.raw.style_json));

            if (!success) {
                Log.e(TAG, "Style parsing failed.");
            }
        } catch (Resources.NotFoundException e) {
            Log.e(TAG, "Can't find style. Error: ", e);
        }
        // Position the map's camera near Sydney, Australia.
        googleMap.moveCamera(CameraUpdateFactory.newLatLng(new LatLng(-34, 151)));
    }
}

Определите в /res/raw/style_json.json произвольный необработанный ресурс, содержащий объявление стиля JSON для скрытия организаций.

Следующее объявление стиля скрывает организации и значки общественного транспорта.

Пример макета (activity_maps.xml) показан ниже.

Строковый ресурс

В следующем примере кода предполагается, что ваш проект содержит строковый ресурс под названием style_json:

package com.example.styledmap;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;

import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MapStyleOptions;

/**
 * A styled map using JSON styles from a string resource.
 */
public class MapsActivityString extends AppCompatActivity
        implements OnMapReadyCallback {

    private static final String TAG = MapsActivityString.class.getSimpleName();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // Retrieve the content view that renders the map.
        setContentView(R.layout.activity_maps_string);

        // Get the SupportMapFragment and register for the callback
        // when the map is ready for use.
        SupportMapFragment mapFragment =
                (SupportMapFragment) getSupportFragmentManager()
                        .findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);
    }

    /**
     * Manipulates the map when it's available.
     * The API invokes this callback when the map is ready for use.
     */
    @Override
    public void onMapReady(GoogleMap googleMap) {

        // Customise the styling of the base map using a JSON object defined
        // in a string resource file. First create a MapStyleOptions object
        // from the JSON styles string, then pass this to the setMapStyle
        // method of the GoogleMap object.
        boolean success = googleMap.setMapStyle(new MapStyleOptions(getResources()
                .getString(R.string.style_json)));

        if (!success) {
            Log.e(TAG, "Style parsing failed.");
        }
        // Position the map's camera near Sydney, Australia.
        googleMap.moveCamera(CameraUpdateFactory.newLatLng(new LatLng(-34, 151)));
    }
}

Определите в /res/values/style_strings.xml строковый ресурс, содержащий объявление стиля JSON для скрытия организаций. В этом файле нужно использовать обратную косую черту для комбинирования с кавычками:

Следующее объявление стиля скрывает организации и значки общественного транспорта.

Пример макета (activity_maps.xml) показан ниже.

Объявления стиля JSON

Стилизованные карты используют две концепции применения цветов и иных стилистических изменений к карте.

  • Селекторы определяют географические элементы, которые можно стилизовать на карте. В их число входят дороги, парки, водоемы и многое другое, а также ярлыки этих элементов. К селекторам относятся объекты и элементы, которые задаются свойствами featureType и elementType.
  • Параметры стилей – это свойства цвета и видимости, которые можно применить к элементам карты. Они определяют отображаемый цвет как комбинацию значений тона, цвета и яркости/гаммы.

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

Мастер стиля для платформы Google Карт

Чтобы быстро создать объект стиля JSON, воспользуйтесь Мастером стиля для платформы Google Карт. Maps SDK for Android поддерживает те же объявления стиля, что и Maps JavaScript API.

Полные примеры кода

Репозиторий ApiDemos в GitHub содержит примеры, демонстрирующие использование сведений о расположении на карте.