15 Jahre Google Maps Platform – Neuigkeiten und Ankündigungen

Kartenfunktionen mit Stilen ausblenden

Du kannst den Stil der Funktionen auf der Karte ändern und sie Funktionen auch vollständig ausblenden. Im folgenden Beispiel wird veranschaulicht, wie du Symbole für Unternehmens-POIs (Points of Interest) und öffentliche Verkehrsmittel auf deiner Karte ausblendest.

Stile lassen sich nur für den Kartentyp normal verwenden und sie wirken sich nicht auf Indoor-Karten aus. Wenn du also mithilfe eines Stils Funktionen ausblendest, wird dadurch nicht verhindert, dass Indoor-Gebäudepläne auf der Karte erscheinen.

JSON-Stilobjekt an deine Karte übergeben

Um deine Karte mit einem Stil zu versehen, kannst du GoogleMap.setMapStyle() aufrufen und ein MapStyleOptions-Objekt übergeben, das deine Stildeklaration im JSON-Format enthält. Du kannst das JSON-Format wie in den folgenden Beispielen gezeigt aus einer Rohressource oder einem String laden:

Rohressource

Im folgenden Codebeispiel wird davon ausgegangen, dass dein Projekt eine Rohressource mit dem Namen style_json enthält:

/**
 * 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)));
    }
}

Definiere eine Rohressource in /res/raw/style_json.json, die die folgende JSON-Stildeklaration enthält, um POIs auszublenden:

Mit der folgenden Stildeklaration werden Symbole für Unternehmens-POIs und öffentliche Verkehrsmittel ausgeblendet:

Das Layout activity_maps.xml sieht so aus:

Stringressource

Im folgenden Codebeispiel wird davon ausgegangen, dass dein Projekt eine Stringressource mit dem Namen style_json enthält:

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)));
    }
}

Definiere eine Stringressource in /res/values/style_strings.xml, die die folgende JSON-Stildeklaration enthält, um POIs auszublenden. Vor Anführungszeichen in dieser Datei musst du einen umgekehrten Schrägstrich platzieren (Escaping):

Mit der folgenden Stildeklaration werden Symbole für Unternehmens-POIs und öffentliche Verkehrsmittel ausgeblendet:

Das Layout activity_maps.xml sieht so aus:

JSON-Stildeklarationen

Für Karten mit benutzerdefinierten Stilen kommen zwei Konzepte zum Einsatz, um Farben und andere Stiländerungen auf eine Karte anzuwenden:

  • Selektoren geben die geografischen Komponenten an, die auf der Karte mit einem Stil versehen werden können. Dazu gehören Straßen, Parks, Gewässer usw. sowie ihre Bezeichnungen. Die Selektoren enthalten Funktionen und Elemente, die als featureType- und elementType-Eigenschaften angegeben sind.
  • Styler sind Farb- und Sichtbarkeitseigenschaften, die auf Kartenelemente angewendet werden können. Damit definierst du die Anzeigefarbe, indem Farbton-, Farb- sowie Helligkeits-/Gammawerte kombiniert werden.

Eine ausführliche Beschreibung der JSON-Stiloptionen findest du in der Stilreferenz.

Maps Platform Styling Wizard

Mit dem Maps Platform Styling Wizard kannst du ganz schnell ein JSON-Stilobjekt generieren. Das Maps SDK for Android unterstützt dieselben Stildeklarationen wie die Maps JavaScript API.

Vollständige Codebeispiele

Das ApiDemos-Repository auf GitHub enthält Beispiele für die Verwendung von Stilen.