Konfigurowanie mapy

Wybierz platformę: Android iOS

W tym artykule opisujemy, jak skonfigurować mapę, która została dodana do aplikacji na Androida za pomocą pakietu Maps SDK na Androida.

Przegląd

Zrzut ekranu mapy Kito ze skonfigurowanymi ustawieniami mapy. Po dodaniu mapy do aplikacji możesz skonfigurować jej początkowe ustawienia i ustawienia w czasie działania. Ustawienia początkowe muszą być skonfigurowane w zależności od tego, czy kontener mapy (SupportMapFragment czy MapView) został dodany statycznie czy dynamicznie. Jeśli kontener mapy został dodany statycznie, możesz skonfigurować początkowe ustawienia mapy w pliku układu. Jeśli dodano je dynamicznie, możesz skonfigurować ustawienia początkowe w wywołaniu zwrotnym OnCreate za pomocą obiektu GoogleMapOptions.

Szczegółowe informacje o dodawaniu kontenera mapy znajdziesz w artykule Dodawanie mapy.

Początkowe ustawienia mapy obejmują następujące elementy:

  • Położenie kamery, w tym lokalizacja, powiększenie, położenie i nachylenie. Szczegółowe informacje na temat pozycjonowania kamery znajdziesz w sekcji Aparat i widok.
  • Typ mapy.
  • Komponenty interfejsu do wyświetlenia, np. przyciski powiększenia i kompas.
  • Gesty, które chcesz włączyć.
  • Określa, czy jest włączony tryb uproszczony.

Te i niektóre ustawienia dodatkowe możesz skonfigurować w czasie działania, aktualizując obiekt GoogleMap w wywołaniu zwrotnym onMapReady. Dodatkowe ustawienia są konfigurowane za pomocą metod klasy GoogleMap, np. przez konfigurowanie warstwy natężenia ruchu i dopełnienia mapy.

Przykład

W przykładowym kodzie poniżej i na zrzutie ekranu powyżej mapa jest skonfigurowana z następującymi ustawieniami.

Początkowe ustawienia są konfigurowane w pliku układu:

  • Włącz elementy sterujące powiększeniem.
  • Włącz sterowanie gestami obracania.
  • Ustaw pochylenie mapy na 30.

Ustawienia środowiska wykonawczego:

  • Wyśrodkuj aparat na Kioto Japan.
  • Włącz mapę hybrydową.
  • Włącz warstwę natężenia ruchu.

Ustawienia początkowe


<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:map="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:name="com.google.android.gms.maps.SupportMapFragment"
    android:id="@+id/map"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    map:uiZoomControls="true"
    map:uiRotateGestures="true"
    map:cameraTilt="30" />
    

Ustawienia środowiska wykonawczego

package com.example.mapsetup;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;

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.MarkerOptions;

public class MainActivity extends AppCompatActivity implements OnMapReadyCallback {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);

    }

    // Update the map configuration at runtime.
    @Override
    public void onMapReady(GoogleMap googleMap) {
        // Set the map coordinates to Kyoto Japan.
        LatLng kyoto = new LatLng(35.00116, 135.7681);
        // Set the map type to Hybrid.
        googleMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
        // Add a marker on the map coordinates.
        googleMap.addMarker(new MarkerOptions()
                .position(kyoto)
                .title("Kyoto"));
        // Move the camera to the map coordinates and zoom in closer.
        googleMap.moveCamera(CameraUpdateFactory.newLatLng(kyoto));
        googleMap.moveCamera(CameraUpdateFactory.zoomTo(15));
        // Display traffic.
        googleMap.setTrafficEnabled(true);

    }
}

Zanim zaczniesz

Zanim zaczniesz, możesz skonfigurować projekt i dodać podstawową mapę, korzystając z tych opcji:

  • Utwórz aplikację, korzystając z szablonu Map dla Android Studio. Szablon Map automatycznie skonfiguruje projekt i doda podstawową mapę. Fragment jest używany jako kontener mapy, który jest dodawany statycznie. Szczegółowe informacje znajdziesz w quickstart.

  • Skonfiguruj ręcznie projekt na potrzeby pakietu SDK i dodaj mapę podstawową. Dzięki temu możesz użyć dowolnego szablonu na Androida i dodać mapę do istniejącej aplikacji.

Konfigurowanie mapy po dodaniu jej statycznej

W tej sekcji dowiesz się, jak ustawić początkowy stan mapy, jeśli dodasz ją statycznie do pliku układu.

Pakiet Maps SDK na Androida definiuje zestaw niestandardowych atrybutów XML dla zasobu SupportMapFragment lub MapView, których można użyć do skonfigurowania początkowego stanu mapy bezpośrednio z pliku układu. Obecnie zdefiniowane są te atrybuty:

  • mapType – typ mapy do wyświetlenia. Prawidłowe wartości to none, normal, hybrid, satellite i terrain.

  • cameraTargetLat, cameraTargetLng, cameraZoom, cameraBearing, cameraTilt – początkowe położenie kamery. Więcej informacji znajdziesz w przewodniku dotyczącym aparatu i widoków.

  • uiZoomControls, uiCompass – określa, czy wyświetlane są elementy sterujące powiększeniem i kompas. Więcej informacji znajdziesz w sekcji UiSettings.

  • uiZoomGestures, uiScrollGestures, uiRotateGestures, uiTiltGestures – określa, czy mają być włączone konkretne gesty. Więcej informacji znajdziesz na stronie UiSettings.

  • zOrderOnTop – wskazuje, czy powierzchnia widoku mapy jest wyświetlana na górze okna mapy, przy elementach sterujących mapy i dowolnym obiekcie w oknie. Szczegółowe informacje znajdziesz na stronie SurfaceView.setZOrderOnTop(boolean).

  • useViewLifecycle – prawidłowa tylko z obiektem SupportMapFragment. Określa, czy cykl życia mapy powinien być powiązany z widokiem fragmentu, czy z samym fragmentem. Szczegółowe informacje znajdziesz tutaj.

  • liteModetrue, aby włączyć tryb uproszczony; w przeciwnym razie: false.

  • mapColorScheme – określa schemat kolorów dla mapy zwykłej i terenu. Wartości to light (domyślna), dark oraz follow_system, które oznaczają, że są używane bieżące ustawienie systemu na podstawie ustawienia urządzenia dotyczącego UI_NIGHT_MODE_MASK. Więcej informacji znajdziesz w artykule Schemat kolorów mapy.

Aby można było używać tych atrybutów niestandardowych w pliku układu, musi on zawierać następującą deklarację przestrzeni nazw. Możesz wybrać dowolną przestrzeń nazw. Nie musi to być map:

xmlns:map="http://schemas.android.com/apk/res-auto"

Następnie możesz dodać atrybuty z prefiksem map: do pliku układu.

Ten plik układu konfiguruje obiekt SupportMapFragment z niestandardowymi atrybutami mapy. Te same atrybuty można zastosować również do obiektu MapView.

<fragment xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:map="http://schemas.android.com/apk/res-auto"
  android:name="com.google.android.gms.maps.SupportMapFragment"
  android:id="@+id/map"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  map:cameraBearing="112.5"
  map:cameraTargetLat="-33.796923"
  map:cameraTargetLng="150.922433"
  map:cameraTilt="30"
  map:cameraZoom="13"
  map:mapType="normal"
  map:mapColorScheme="dark"
  map:uiCompass="false"
  map:uiRotateGestures="true"
  map:uiScrollGestures="false"
  map:uiTiltGestures="true"
  map:uiZoomControls="false"
  map:uiZoomGestures="true"/>

Konfigurowanie mapy po dynamicznym dodaniu

Z tej sekcji dowiesz się, jak ustawić początkowy stan mapy po dodaniu jej do aplikacji dynamicznie.

Jeśli SupportMapFragment lub MapView został dodany dynamicznie, możesz ustawić początkowy stan mapy w obiekcie GoogleMapOptions. Dostępne opcje są takie same jak w pliku układu. GoogleMapOptions możesz utworzyć w ten sposób:

Kotlin



val options = GoogleMapOptions()

      

Java


GoogleMapOptions options = new GoogleMapOptions();

      

Następnie skonfiguruj go w ten sposób:

Kotlin



options.mapType(GoogleMap.MAP_TYPE_SATELLITE)
    .compassEnabled(false)
    .rotateGesturesEnabled(false)
    .tiltGesturesEnabled(false)

      

Java


options.mapType(GoogleMap.MAP_TYPE_SATELLITE)
    .compassEnabled(false)
    .rotateGesturesEnabled(false)
    .tiltGesturesEnabled(false);

      

Aby zastosować te opcje podczas tworzenia mapy, wykonaj jedną z następujących czynności:

Konfigurowanie warstwy natężenia ruchu

Włączając warstwę natężenia ruchu, możesz wyświetlać na mapie informacje o natężeniu ruchu. Warstwę ruchu można włączyć lub wyłączyć, wywołując metodę setTrafficEnabled(). Aby sprawdzić, czy warstwa ruchu jest obecnie włączona, wywołaj metodę isTrafficEnabled(). Poniższy zrzut ekranu przedstawia mapę z włączoną warstwą natężenia ruchu.

Ustawianie typu mapy

Aby ustawić typ mapy, wywołaj metodę setMapType. Aby na przykład wyświetlić mapę satelitarną:

Kotlin



// Sets the map type to be "hybrid"
map.mapType = GoogleMap.MAP_TYPE_HYBRID

      

Java


// Sets the map type to be "hybrid"
map.setMapType(GoogleMap.MAP_TYPE_HYBRID);

      

Na poniższym obrazie porównano mapy normalne, hybrydowe i terenowe:

Porównanie typów map

Konfigurowanie budynków 3D

W wielu miastach z bliska będą widoczne budynki 3D, jak widać na poniższym zdjęciu Vancouver w Kanadzie. Aby wyłączyć budynki 3D, wywołaj GoogleMap.setBuildingsEnabled(false).

Mapa Vancouver w Kanadzie

Skonfiguruj ustawienia mapy obiektu

Przy dużym powiększeniu mapa pokazuje plany pięter obiektów znajdujących się w pomieszczeniach, takich jak lotniska, centra handlowe, duże sklepy i stacje transportu publicznego. Te plany pięter, nazywane mapami obiektów, są wyświetlane dla typów map „normalnych” i „satelitarnych” (GoogleMap.MAP_TYPE_NORMAL i GoogleMap.MAP_TYPE_SATELLITE). Włączają się automatycznie, gdy użytkownik powiększa widok, i znikają, gdy mapa jest pomniejszona.

Powiadomienie o wycofaniu: w przyszłej wersji mapy obiektów będą dostępne tylko na mapie typu normal. Od tej przyszłej wersji mapy obiektów nie będą obsługiwane w mapach satellite, terrain ani hybrid. Nawet jeśli obiekt wewnętrzny nie jest obsługiwany, isIndoorEnabled() nadal będzie zwracać wartość ustawioną za pomocą setIndoorEnabled(), tak jak do tej pory. Domyślnie setIndoorEnabled ma wartość true. Z informacji o wersji dowiesz się, kiedy pomoc wewnątrz budynków dla tych typów map będzie niedostępna.

Przykład mapy obiektu

Oto podsumowanie funkcji map obiektów w interfejsie API:

Skonfiguruj dopełnienie mapy

W tym filmie pokazujemy przykład dopełnienia mapy.

Mapa Google ma wypełnić cały region zdefiniowany przez jej element kontenera, zwykle MapView lub SupportMapFragment. Kilka aspektów wyglądu i działania mapy zależą od wymiarów jej kontenera:

  • Cel kamery będzie odnosić się do środka wyściełanego obszaru.
  • Elementy sterujące mapy są umieszczone względem krawędzi mapy.
  • Wzdłuż dolnej krawędzi mapy pojawią się informacje prawne, takie jak oświadczenia dotyczące praw autorskich lub logo Google.

Możesz dodać dopełnienie wokół krawędzi mapy za pomocą elementu GoogleMap.setPadding(). Mapa będzie nadal wypełniała cały kontener, ale położenie tekstu i elementów sterujących, gesty na mapie i ruchy kamery będą działać tak, jakby zostały umieszczone w mniejszej przestrzeni. Powoduje to następujące zmiany:

  • Ruchy kamery wykonywane przez wywołania interfejsu API lub naciśnięcia przycisków (np. kompas, moja lokalizacja, przyciski powiększenia) są zależne od wyściełanego obszaru.
  • Metoda getCameraPosition zwraca środek obszaru dopełnionego.
  • Metody Projection i getVisibleRegion zwracają region z dopełnieniem.
  • Elementy sterujące interfejsu są odsunięte od krawędzi kontenera o określoną liczbę pikseli.

Dopełnienie może być pomocne przy projektowaniu interfejsów, które nakładają się na część mapy. Na poniższym obrazie mapa jest wyściełana wzdłuż górnej i prawej krawędzi. Widoczne elementy sterujące mapą i tekst prawny będą wyświetlane na krawędziach dopełnionego obszaru i wyświetlane na zielono, a mapa będzie dalej wypełniała cały kontener (kolorem niebieskim). W tym przykładzie możesz unosić menu po prawej stronie mapy bez zasłaniania elementów sterujących mapy.

Dopełnienie mapy

Schemat kolorów mapy

W przypadku map typu „normalny” i „terenowy” możesz dynamicznie ustawić schemat kolorów mapy na ciemny lub jasny albo zastosować bieżące ustawienie systemowe. Możesz na przykład przyciemnić lub rozjaśnić schemat kolorów mapy w zależności od pory dnia albo korzystania z urządzenia w pomieszczeniach lub na zewnątrz.

Domyślnie mapa używa trybu jasnego. Obecna wartość ustawienia systemu zależy od ustawienia urządzenia w UI_NIGHT_MODE_MASK.

Kotlin

mapFragment = SupportMapFragment.newInstance(GoogleMapOptions().mapColorScheme(MapColorScheme.DARK).mapId(mapId2))

Java

mapFragment = SupportMapFragment.newInstance(new GoogleMapOptions().mapColorScheme(MapColorScheme.DARK).mapId(mapId2));

Możesz przełączać schemat kolorów za pomocą metody GoogleMap.setMapColorScheme(), aby ustawić bieżący styl na tryb ciemny lub tryb jasny albo zgodnie z ustawieniami systemowymi.

Kotlin

googleMap.setMapColorScheme(MapColorScheme.DARK)
googleMap.setMapColorScheme(MapColorScheme.LIGHT)
googleMap.setMapColorScheme(MapColorScheme.FOLLOW_SYSTEM)

Java

googleMap.setMapColorScheme(MapColorScheme.DARK);
googleMap.setMapColorScheme(MapColorScheme.LIGHT);
googleMap.setMapColorScheme(MapColorScheme.FOLLOW_SYSTEM);