Dodawanie mapy

Wybierz platformę: Android iOS JavaScript

W tym artykule opisujemy, jak dodać podstawową mapę do aplikacji na Androida po skonfigurowaniu projektu do używania pakietu Maps SDK na Androida. Po dodaniu mapy możesz zmienić jej typ i funkcje.

Przegląd

Pakiet Maps SDK na Androida udostępnia kilka klas, których aplikacja może używać do zarządzania cyklem życia, funkcjami i danymi mapy. Klasy obsługują interakcje użytkownika oparte na modelu interfejsu Androida, takie jak ustawianie początkowego stanu mapy i reagowanie na gesty użytkownika w czasie działania.

Główne interfejsy i klasy do obsługi map:

  • GoogleMap – punkt wejścia do zarządzania funkcjami i danymi mapy bazowej. Aplikacja może uzyskać dostęp do obiektu GoogleMap dopiero po pobraniu go z obiektu SupportMapFragment lub MapView.

  • SupportMapFragment – fragment do zarządzania cyklem życia obiektu GoogleMap.

  • MapView – widok do zarządzania cyklem życia obiektu GoogleMap.

  • OnMapReadyCallback – interfejs wywołania zwrotnego, który obsługuje zdarzenia i interakcje użytkownika w przypadku obiektu GoogleMap.

Obiekt GoogleMap automatycznie wykonuje te operacje:

  • Łączenie z usługą Map Google.
  • Pobieranie kafelków mapy.
  • Wyświetlanie kafelków na ekranie urządzenia.
  • wyświetlanie różnych elementów sterujących, takich jak przesuwanie i powiększanie;
  • Reagowanie na gesty przesuwania i powiększania poprzez przesuwanie mapy oraz powiększanie i pomniejszanie widoku.

Aby użyć obiektu GoogleMap w aplikacji, musisz użyć obiektu SupportMapFragment lub MapView jako obiektu kontenera mapy, a następnie pobrać z niego obiekt GoogleMap. Klasy kontenerów pochodzą z fragmentu lub widoku Androida, dlatego zapewniają mapie funkcje zarządzania cyklem życia i interfejsem użytkownika, które są dostępne w ich klasach bazowych Androida. Klasa SupportMapFragment to nowocześniejszy i bardziej popularny kontener dla obiektu GoogleMap.

Wyświetlanie kodu

Poniższy kod pochodzi z pełnej aktywności w Javie używanej w tym temacie podczas statycznego dodawania fragmentu. Projekt na Androida został utworzony na podstawie szablonu Pusty projekt i zaktualizowany zgodnie z przewodnikiem konfiguracji projektu. Po wykonaniu czynności opisanych w tym temacie kod może się różnić w zależności od szablonu projektu.

  package com.example.mapsetup;

  import androidx.appcompat.app.AppCompatActivity;

  import android.os.Bundle;

  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;

  // Implement OnMapReadyCallback.
  public class MainActivity extends AppCompatActivity implements OnMapReadyCallback {

      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          // Set the layout file as the content view.
          setContentView(R.layout.activity_main);

          // Get a handle to the fragment and register the callback.
          SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                  .findFragmentById(R.id.map);
          mapFragment.getMapAsync(this);

      }

      // Get a handle to the GoogleMap object and display marker.
      @Override
      public void onMapReady(GoogleMap googleMap) {
          googleMap.addMarker(new MarkerOptions()
                  .position(new LatLng(0, 0))
                  .title("Marker"));
      }
  }

Dodawanie mapy

W tej sekcji opisujemy, jak dodać podstawową mapę, używając fragmentu jako kontenera mapy. Możesz jednak użyć widoku. Przykład znajdziesz w RawMapViewDemoActivity w GitHubie.

Podstawowe czynności:

  1. Aby pobrać pakiet SDK, uzyskać klucz interfejsu API i dodać wymagane platformy, wykonaj czynności opisane w tym artykule:

    1. Konfigurowanie w konsoli Google Cloud

    2. Używanie klucza interfejsu API

    3. Konfigurowanie projektu Android Studio

  2. Dodaj do aktywności obiekt SupportMapFragment, który będzie obsługiwać mapę. Fragment możesz dodać statycznie lub dynamicznie.

  3. Zaimplementuj interfejs OnMapReadyCallback.

  4. Ustaw plik układu jako widok treści.

  5. Jeśli fragment został dodany statycznie, uzyskaj do niego dostęp.

  6. Zarejestruj wywołanie zwrotne.

  7. Uzyskaj uchwyt do obiektu GoogleMap.

Dodawanie obiektu SupportMapFragment

Obiekt SupportMapFragment możesz dodać do aplikacji statycznie lub dynamicznie. Najprostszym sposobem jest dodanie go statycznie. Jeśli dodasz fragment dynamicznie, możesz wykonać na nim dodatkowe działania, takie jak usunięcie i zastąpienie go w czasie działania programu.

Statyczne dodawanie fragmentu

W pliku układu aktywności, która będzie obsługiwać mapę:

  1. Dodaj element fragment.
  2. Dodaj deklarację imienia i nazwiskaxmlns:map="http://schemas.android.com/apk/res-auto". Umożliwia to używanie maps niestandardowych atrybutów XML.
  3. W elemencie fragment ustaw atrybut android:name na com.google.android.gms.maps.SupportMapFragment.
  4. W elemencie fragment dodaj atrybut android:id i ustaw go na identyfikator zasobu R.id.map (@+id/map).

Oto przykład pełnego pliku układu, który zawiera element fragment:

<?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"
    android:name="com.google.android.gms.maps.SupportMapFragment"
    android:id="@+id/map"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

Aby dodać fragment dynamicznie

W aktywności:

  1. Utwórz instancję SupportMapFragment.
  2. Zatwierdź transakcję, która doda fragment do aktywności. Więcej informacji znajdziesz w artykule Transakcje fragmentowe.

Na przykład:

Kotlin

val mapFragment = SupportMapFragment.newInstance()
supportFragmentManager
    .beginTransaction()
    .add(R.id.my_container, mapFragment)
    .commit()

      

Java

SupportMapFragment mapFragment = SupportMapFragment.newInstance();
getSupportFragmentManager()
    .beginTransaction()
    .add(R.id.my_container, mapFragment)
    .commit();

      

Zaimplementuj interfejs OnMapReadyCallback.

Zaktualizuj deklarację aktywności w ten sposób:

Kotlin

class MainActivity : AppCompatActivity(), OnMapReadyCallback {

    // ...
}

      

Java

class MainActivity extends AppCompatActivity implements OnMapReadyCallback {
    // ...
}

      

Ustawianie widoku treści

W metodzie onCreate aktywności wywołaj metodę setContentView i ustaw plik układu jako widok treści.

Jeśli na przykład plik układu ma nazwę main.xml:

Kotlin

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.main)
}

      

Java

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

      

Uzyskaj uchwyt do fragmentu i zarejestruj wywołanie zwrotne.

  1. Aby uzyskać uchwyt do fragmentu, wywołaj metodę FragmentManager.findFragmentById i przekaż do niej identyfikator zasobu fragmentu w pliku układu. Jeśli fragment został dodany dynamicznie, pomiń ten krok, ponieważ uchwyt został już pobrany.

  2. Wywołaj metodę getMapAsync, aby ustawić wywołanie zwrotne w fragmencie.

Jeśli na przykład fragment został dodany statycznie:

Kotlin

val mapFragment = supportFragmentManager
    .findFragmentById(R.id.map) as SupportMapFragment
mapFragment.getMapAsync(this)

      

Java

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

      

Uzyskiwanie uchwytu do obiektu GoogleMap

Użyj metody wywołania zwrotnego onMapReady, aby uzyskać uchwyt do obiektu GoogleMap. Wywołanie zwrotne jest wywoływane, gdy mapa jest gotowa do odbierania danych wejściowych użytkownika. Zwraca niepustą instancję klasy GoogleMap, której możesz użyć do zaktualizowania mapy.

W tym przykładzie wywołanie zwrotne onMapReady pobiera uchwyt do obiektu GoogleMap, a następnie do mapy dodawany jest znacznik:

Kotlin

override fun onMapReady(googleMap: GoogleMap) {
    googleMap.addMarker(
        MarkerOptions()
            .position(LatLng(0.0, 0.0))
            .title("Marker")
    )
}

      

Java

@Override
public void onMapReady(GoogleMap googleMap) {
    googleMap.addMarker(new MarkerOptions()
        .position(new LatLng(0, 0))
        .title("Marker"));
}

      

Zrzut ekranu z mapą i znacznikiem wyśrodkowanym na wyspie Null.

Gdy skompilujesz i uruchomisz aplikację, wyświetli się mapa z markerem na wyspie Null Island (0 stopni szerokości i 0 stopni długości geograficznej).

Wyświetl kod pełnej aktywności:

Wyświetl ukończony moduł


Co dalej?

Po wykonaniu tych czynności możesz skonfigurować ustawienia mapy.