Dodawanie mapy

Wybierz platformę: Android iOS JavaScript

W tym artykule opisujemy, jak dodać podstawową mapę do aplikacji na Androida po skonfigurował projekt tak, aby używał pakietu Maps SDK na Androida. Po dodając mapę, możesz zmienić typ mapy i jej funkcje.

Omówienie

Maps SDK na Androida udostępnia kilka klas, których Twoja aplikacja może używać zarządzania cyklem życia, funkcjami i danymi mapy. Użytkownik, którego zajęcia są powiązane z zajęciami interakcje w oparciu o model interfejsu Androida, takie jak ustawienie początkowego stanu mapy i reagowanie na gesty wpisywane przez użytkownika w czasie działania.

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

  • GoogleMap – punkt wejścia do zarządzania bazową mapą funkcji i danych. Aplikacja ma dostęp do obiektu GoogleMap dopiero wtedy, gdy otrzymała – pobrano z obiektu SupportMapFragment lub MapView.

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

  • MapViewwidok do zarządzania cyklem życia produktu GoogleMap obiekt.

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

Obiekt GoogleMap automatycznie wykonuje te operacje:

  • Łączę z usługą Mapy Google.
  • Pobieram fragmenty 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 oraz powiększanie i pomniejszanie.

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. Ponieważ kontener klas wywodzących się z fragmentu lub widoku Androida, udostępniają mapę z zarządzaniem cyklem życia i możliwościami interfejsu klas podstawowych Androida. Klasa SupportMapFragment to bardziej nowoczesny i popularny kontener dla GoogleMap obiekt.

Wyświetl kod

Następujący kod pochodzi z pełnej aktywności Java używanej w tym temacie podczas dodawania statycznie fragmentem. 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 Twój kod może się różnić w zależności od i 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. Na przykład zobacz RawMapViewDemoActivity w GitHubie.

Podstawowe kroki:

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

    1. Skonfiguruj w konsoli Google Cloud

    2. Używanie klucza interfejsu API

    3. Konfigurowanie projektu w Android Studio

  2. Dodaj obiekt SupportMapFragment do działania, które 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 dla niego uchwyt.

  6. Zarejestruj wywołanie zwrotne.

  7. Pobierz nick obiektu GoogleMap.

Dodaj obiekt SupportMapFragment

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

Aby dodać fragment statycznie

W pliku układu działania, które ma 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 wartość com.google.android.gms.maps.SupportMapFragment
  4. W elemencie fragment dodaj atrybut android:id i ustaw go na mapa.id. identyfikator zasobu (@+id/map).

Oto przykład całego pliku układu zawierającego 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 dodaje fragment do aktywności. Aby dowiedzieć się więcej, zobacz Fragmenty 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();

      

Wdróż interfejs OnMapReadyCallback

Zaktualizuj deklarację dotyczącą 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 dla 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 np. dodasz fragment 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 odebrania danych wejściowych użytkownika. Udostępnia niepustą instancję klasy GoogleMap, którą których możesz użyć do aktualizacji mapy.

W tym przykładzie wywołanie zwrotne onMapReady pobiera uchwyt do GoogleMap a następnie znacznik zostanie dodany do mapy:

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 dla całego działania:

Wyświetl Zakończ ćwiczenie


Co dalej?

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