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

Выберите платформу: Android iOS JavaScript

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

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

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

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

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

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

// Copyright 2020 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package com.example.styledmap;

import android.content.res.Resources;
import android.os.Bundle;
import android.util.Log;
import androidx.appcompat.app.AppCompatActivity;

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 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 для Android поддерживает те же объявления стиля, что и Maps JavaScript API.

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

Примеры использования стилей можно найти в репозитории ApiDemos на GitHub.