Konfigurowanie mapy

Wybierz platformę: Android iOS

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

Omówienie

Zrzut ekranu mapy Kito ze skonfigurowanymi ustawieniami mapy. Po dodaniu mapy do aplikacji możesz skonfigurować początkowe i czasowe działanie aplikacji ustawienia mapy. Ustawienia początkowe muszą być skonfigurowane na podstawie tego, czy dodany przez Ciebie kontener mapy (SupportMapFragment lub MapView) statycznie lub dynamicznie. Jeśli kontener mapy został dodane statycznie, można skonfigurować początkowe ustawienia mapy w pliku układu. Jeśli została dodana dynamicznie, możesz skonfigurować ustawienia początkowe w OnCreate wywołanie zwrotne z GoogleMapOptions obiektu.

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. powiększenie; i kompas.
  • Gesty, które chcesz włączyć.
  • Określa, czy jest włączony tryb uproszczony.

Te ustawienia oraz niektóre ustawienia dodatkowe można skonfigurować w czasie działania aktualizowanie obiektu GoogleMap w onMapReady oddzwanianie. Dodatkowe ustawienia konfiguruje się za pomocą metod GoogleMap, na przykład konfigurujące warstwa natężenia ruchu i dopełnienie mapy.

Przykład

W przykładowym kodzie poniżej i na zrzutie ekranu powyżej mapa jest został skonfigurowany 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ę w następujące opcje:

  • Utwórz aplikację, korzystając z szablonu Map dla Android Studio. Szablon Mapy automatycznie konfiguruje projekt i dodaje podstawową mapę. Użyto fragmentu jako kontener mapy i dodawany statycznie. Więcej informacji: krótkie wprowadzenie.

  • ręcznie skonfigurować projekt pod kątem SDK; dodać mapę podstawową. Pozwala to użyć dowolnego szablonu Androida mapować na istniejącą aplikację.

Konfigurowanie mapy po dodaniu jej statycznej

W tej sekcji dowiesz się, jak ustawić początkowy stan mapy, jeśli została ona dodana statycznie na plik układu.

Pakiet SDK Maps SDK na Androida definiuje zestaw niestandardowych atrybutów XML dla atrybutu SupportMapFragment lub MapView, których możesz użyć do skonfigurowania początkowego bezpośrednio z pliku układu. Następujące atrybuty są aktualnie zdefiniowane:

  • 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. Zobacz aparat i widoki.

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

  • uiZoomGestures, uiScrollGestures, uiRotateGestures, uiTiltGestures – Określa, czy włączone są określone gesty. Zobacz UiSettings, aby uzyskać więcej informacji.

  • zOrderOnTop – wskazuje, czy powierzchnia widoku mapy jest wyświetlana na nad oknem mapy, elementy sterujące mapą i dowolny obiekt w oknie. Zobacz SurfaceView.setZOrderOnTop(boolean), aby wyświetlić szczegółowe informacje.

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

  • liteModetrue, aby włączyć wersję uproszczoną; w przeciwnym razie: false.

  • mapColorScheme – określa schemat kolorów dla mapy zwykłej i terenu. Wartości to m.in. light (domyślna), dark i follow_system. Oznacza to, że służy do bieżące ustawienie systemu jest oparte na ustawieniu urządzenia UI_NIGHT_MODE_MASK. Więcej informacji znajdziesz w artykule Schemat kolorów mapy.

Aby użyć tych niestandardowych atrybutów w pliku układu, musi on należy uwzględnić tę deklarację przestrzeni nazw. Możesz wybrać dowolną przestrzeń nazw, nie musi być typu 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 niestandardowym ustawieniem atrybutów mapy. Do obiektu MapView można stosować te same atrybuty, co cóż.

<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

W tej sekcji dowiesz się, jak ustawić początkowy stan mapy, jeśli została ona dodana do aplikacji.

Jeśli SupportMapFragment lub MapView został dodany dynamicznie, możesz ustawić początkowy stan mapy w obiekcie GoogleMapOptions. to te same opcje, które są dostępne 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:

Lokalizowanie mapy

Gdy dodasz do aplikacji MapView lub SupportMapFragment, elementy tekstowe są wyświetlane na mapie w odpowiednim języku w zależności od urządzenia użytkownika ustawienia i lokalizację. Języki używane w aplikacji możesz ograniczyć do podzbiór wszystkich obsługiwanych języków, dodając element resConfigs do Gradle. . Pomaga to wyciąć nieużywane języki. Zmniejsza to także rozmiar pliku binarnego aplikacji. Na przykład:

defaultConfig {
    resConfigs "en", "fr", "es", "zh", "de", "ja", "ru", "ko", "pt", "in"
}

Dowiedz się więcej o lokalizowaniu aplikacji na Androida.

Konfigurowanie warstwy natężenia ruchu

Włączając warstwę natężenia ruchu, możesz wyświetlać na mapie informacje o natężeniu ruchu. Dostępne opcje włącz i wyłącz warstwę natężenia ruchu, wywołując metodę setTrafficEnabled() i pozwala określić, czy warstwa ruchu jest obecnie włączona przez Wywołując funkcję 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 przy oglądaniu z bliska będą widoczne budynki 3D, na poniższym zdjęciu Vancouver w Kanadzie. Aby wyłączyć budynki 3D, połączenia GoogleMap.setBuildingsEnabled(false)

Mapa Vancouver w Kanadzie

Skonfiguruj ustawienia mapy obiektu

Przy dużym powiększeniu mapy pokazują plany pięter w obiektach takich jak lotniska, centra handlowe, duże sklepy i środki transportu publicznego. kilku stacji. Takie plany pięter, nazywane mapami obiektów, są wyświetlane w przypadku „normalnych” i „satelita” typy map (GoogleMap.MAP_TYPE_NORMAL i GoogleMap.MAP_TYPE_SATELLITE). Włączają się one automatycznie, gdy użytkownik powiększa się i znika po pomniejszeniu mapy.

Powiadomienie o wycofaniu: w przyszłej wersji funkcja ta będzie dostępna tylko w pomieszczeniach. Mapy będą dostępne tylko na mapie typu normal. Z tego przyszła wersja, mapy obiektów nie będą obsługiwane w satellite, Mapy terrain lub hybrid. Nawet jeśli wewnątrz budynku nie jest jest obsługiwany, isIndoorEnabled() nadal będzie zwracać wartość , który został ustawiony w setIndoorEnabled(), tak jak ma to miejsce obecnie. Według domyślna wartość w kolumnie setIndoorEnabled to true. informacje o wersji pozwalają będziesz otrzymywać powiadomienia, gdy pomoc wewnątrz budynków stanie się niedostępna.

Przykład mapy obiektu

Oto podsumowanie funkcji map obiektów w interfejsie API:

  • Możesz wyłączyć mapy obiektów, dzwoniąc GoogleMap.setIndoorEnabled(false) Domyślnie mapy obiektów są włączone. Mapy obiektów są wyświetlane na jednej mapie w za jednym razem. Domyślnie jest to pierwsza mapa dodana do Twojej aplikacji. Do wyświetlać mapy obiektów na innej mapie, wyłączyć je na pierwszej mapie, wywołaj setIndoorEnabled(true) na drugiej mapie.
  • Aby wyłączyć domyślny selektor poziomu (selektor pięter), wywołaj GoogleMap.getUiSettings().setIndoorLevelPickerEnabled(false) Więcej informacji znajdziesz w sekcji Korzystanie z mapy.
  • OnIndoorStateChangeListener – określa detektory, które: które wykrywają ostrość obiektu lub aktywowanie poziomu. w budynku. Więcej informacji znajdziesz w sekcji Korzystanie z mapy.
  • getFocusedBuilding – pobiera budynek, który znajduje się w ostrość. Następnie możesz znaleźć aktywny poziom, dzwoniąc pod numer IndoorBuilding.getActiveLevelIndex()
  • Styl mapy podstawowej nie ma wpływu na mapy obiektów.

Skonfiguruj dopełnienie mapy

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

Mapa Google ma zostać zaprojektowana tak, aby wypełnić cały region zdefiniowany przez jej kontener. zwykle MapView lub SupportMapFragment. Kilka aspektów wygląd i działanie mapy są określane na podstawie 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.
  • Pojawią się informacje prawne, takie jak oświadczenia dotyczące praw autorskich lub logo Google. wzdłuż dolnej krawędzi mapy.

Możesz dodać dopełnienie wokół krawędzi mapy za pomocą GoogleMapsetPadding(). Mapa aby wypełnić cały kontener, ale tekst i elementy sterujące pozycjonowaniem, mapą gesty i ruchy kamery będą działać tak, jakby urządzenie zostało umieszczone o mniejszej przestrzeni. Powoduje to następujące zmiany:

  • Ruchy kamery wywoływane przez wywołania interfejsu API lub naciśnięcia przycisku (np. kompas, położenie, przyciski powiększenia) są ustawiane względem 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ślony liczba pikseli.

Dopełnienie może być pomocne przy projektowaniu interfejsów, które nakładają się mapy. Na poniższej ilustracji mapa jest wyściełana u góry i wzdłuż krawędzie po prawej stronie. Widoczne elementy sterujące mapą i tekst prawny będą wyświetlane dopełnionego obszaru, który jest wyświetlany na zielono, podczas gdy do wypełnienia całego kontenera (niebieskiego). W tym przykładzie możesz użyć funkcji pływającej z prawej strony mapy bez zasłaniania elementów sterujących mapy.

Dopełnienie mapy

Schemat kolorów mapy

W przypadku map typu normalnego i terenu możesz ustawić schemat kolorów mapy dynamicznie na ciemne lub jasne albo zgodnie z bieżącym ustawieniem systemu. Przykład: możesz przyciemnić lub rozjaśnić schemat kolorów mapy w zależności od pory dnia lub do użytku wewnątrz lub na zewnątrz.

Domyślnie mapa używa trybu jasnego. Obecna wartość ustawienia systemu zależy od w ustawieniu urządzenia 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));

Schemat kolorów możesz przełączać za pomocą GoogleMap.setMapColorScheme() aby ustawić bieżący styl na tryb ciemny lub jasny lub zgodnie z systemem ustawieniach.

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