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
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
iterrain
.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 sekcjiUiSettings
.uiZoomGestures
,uiScrollGestures
,uiRotateGestures
,uiTiltGestures
– Określa, czy włączone są określone gesty. ZobaczUiSettings
, 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 obiektemSupportMapFragment
. Określa czy cykl życia mapy powinien być powiązany z widokiem fragmentu czy z widokiem fragment tekstu. Szczegółowe informacje znajdziesz tutaj.liteMode
–true
, 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
ifollow_system
. Oznacza to, że służy do bieżące ustawienie systemu jest oparte na ustawieniu urządzeniaUI_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:
- Jeśli używasz parametru
SupportMapFragment
,SupportMapFragment.newInstance(GoogleMapOptions options)
. statycznej metody fabryki, by utworzyć fragment i przekazać go w ustawieniach. - Jeśli używasz parametru
MapView
, KonstruktorMapView(Context, GoogleMapOptions)
i przekazać je w ustawieniach.
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 trzech typów map. Porównanie typów map](https://developers-dot-devsite-v2-prod.appspot.com/static/maps/documentation/android-sdk/images/map_types.png?authuser=0000&hl=pl)
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](https://developers-dot-devsite-v2-prod.appspot.com/static/maps/documentation/android-sdk/images/vancouver.png?authuser=0000&hl=pl)
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, zwane 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 przeznaczona dla wszystkich
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. Przykład mapy obiektu](https://developers-dot-devsite-v2-prod.appspot.com/static/maps/documentation/android-sdk/images/indoor.png?authuser=0000&hl=pl)
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łajsetIndoorEnabled(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 numerIndoorBuilding.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ą
GoogleMap
setPadding()
. 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
igetVisibleRegion
zwracają region z dopełnieniem. - Elementy sterujące interfejsu są odsunięte od krawędzi kontenera o określony liczbę 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.
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 i 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);