Dodawanie mapy

Wybierz platformę: Android iOS JavaScript

W tym temacie opisujemy, jak dodać do aplikacji na Androida podstawową mapę po skonfigurowaniu projektu do korzystania z pakietu Maps SDK na Androida. Po dodając mapę, możesz zmienić typ mapy i jej funkcje.

Omówienie

Pakiet SDK Map na Androida udostępnia kilka klas, których aplikacja może używać do zarządzania cyklem życia, funkcjami i danymi mapy. Te klasy obsługują interakcje z użytkownikiem na podstawie modelu interfejsu użytkownika Androida, np. ustawiania początkowego stanu mapy i reagowania na gesty użytkownika w czasie wykonywania.

Główny interfejs i klasy do obsługi map:

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

  • SupportMapFragmentfragment domeny zarządzania cyklem życia obiektu GoogleMap.

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

  • OnMapReadyCallback – interfejs wywołania zwrotnego, obsługuje zdarzenia i interakcje użytkownika z obiektem GoogleMap.

Obiekt GoogleMap automatycznie wykonuje te operacje:

  • Łączenie z usługą Mapy Google.
  • Pobieranie elementów mapy.
  • Wyświetlam kafelki 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 przez przesuwanie mapy i powiększanie lub pomniejszanie widoku;

Aby użyć obiektu GoogleMap w aplikacji, musisz użyć SupportMapFragment lub MapView jako obiekt kontenera mapy oraz a następnie pobierz obiekt GoogleMap z kontenera. Klasy kontenera pochodzą z fragmentu lub widoku Androida, dzięki czemu zapewniają mapie zarządzanie cyklem życia i możliwości interfejsu użytkownika z podstawowych klas Androida. Klasa SupportMapFragment to bardziej nowoczesny i popularny kontener dla GoogleMap obiekt.

Wyświetlanie kodu

Poniższy kod pochodzi z pełnej aktywności w języku Java użytej w tym temacie do statycznego dodawania fragmentu. Projekt na Androida został utworzony na podstawie pustego projektu a następnie zaktualizowany na podstawie przewodnika po 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

Ta sekcja opisuje sposób dodawania mapy podstawowej przy użyciu fragmentu jako mapy container; możesz jednak użyć widoku. Przykład znajdziesz w pliku RawMapViewDemoActivity na GitHubie.

Podstawowe kroki:

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

    1. Konfigurowanie w konsoli Google Cloud

    2. Korzystanie z klucza interfejsu API

    3. Konfigurowanie projektu w Android Studio

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

  3. Wdróż interfejs OnMapReadyCallback.

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

  5. Jeśli fragment został dodany statycznie, uzyskaj do niego uchwyt.

  6. Zarejestruj wywołanie zwrotne.

  7. Uzyskaj obiekt GoogleMap.

Dodaj obiekt SupportMapFragment

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

Dodawanie fragmentu statycznego

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

  1. Dodaj element fragment.
  2. Dodaj deklarację nazwy xmlns:map="http://schemas.android.com/apk/res-auto" Dzięki temu można używać funkcji niestandardowych atrybutów XML z maps.
  3. W elemencie fragment ustaw atrybut android:name na com.google.android.gms.maps.SupportMapFragment.
  4. W elemencie fragment dodaj atrybut android:id i przypisz mu identyfikator zasobu R.id.map (@+id/map).

Tak na przykład mamy pełny plik układu zawierający 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 dynamicznie dodać fragment

W aktywności:

  1. Utwórz instancję SupportMapFragment.
  2. Zrealizuj transakcję, która dodaje fragment do aktywności. Więcej informacji znajdziesz w artykule Ułamywanie transakcji.

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 funkcję setContentView i ustaw plik układu jako widok treści.

Jeśli na przykład plik układu nazywa się 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);
}

      

Pobierz uchwyt fragmentu i zarejestruj wywołanie zwrotne

  1. Aby uzyskać uchwyt fragmentu, wywołaj metodę FragmentManager.findFragmentById i prześlij ją. identyfikator zasobu fragmentu w pliku układu. Jeśli dodałeś fragment dynamicznie, pomiń ten krok, ponieważ nick został już pobrany.

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

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

      

Pobieranie nicka obiektu GoogleMap

Użyj metody wywołania zwrotnego onMapReady, aby uzyskać uchwyt dla funkcji GoogleMapobiekt. wywołanie zwrotne jest wywoływane, gdy mapa jest gotowa do odbierania danych wejściowych użytkownika. Udostępnia instancję klasy GoogleMap o wartości niezerowej, której możesz użyć do zaktualizowania mapy.

W tym przykładzie funkcja wywołania zwrotnego 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ę, pojawi się mapa ze znacznikiem na wyspie Null (zero stopni szerokości geograficznej i zero stopni długości geograficznej).

Wyświetl kod całego ćwiczenia:

Wyświetl Zakończ ćwiczenie


Co dalej?

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