Добавить карту

Оптимизируйте свои подборки Сохраняйте и классифицируйте контент в соответствии со своими настройками.
Выберите платформу: Android iOS JavaScript

В этом разделе описывается, как добавить базовую карту в приложение для Android после того, как вы настроили проект для использования Maps SDK для Android. После добавления карты вы можете изменить ее тип и функции .

Обзор

Maps SDK для Android предоставляет несколько классов, которые ваше приложение может использовать для управления жизненным циклом, функциями и данными карты. Классы поддерживают взаимодействие с пользователем на основе модели пользовательского интерфейса Android, например установку начального состояния карты и реагирование на жесты, вводимые пользователем во время выполнения.

Основной интерфейс и классы для работы с картами:

  • GoogleMap — точка входа для управления базовыми функциями и данными карты. Ваше приложение может получить доступ к объекту GoogleMap только после того, как он будет получен из объекта SupportMapFragment или MapView .

  • SupportMapFragmentФрагмент для управления жизненным циклом объекта GoogleMap .

  • MapViewпредставление для управления жизненным циклом объекта GoogleMap .

  • OnMapReadyCallback — интерфейс обратного вызова, который обрабатывает события и взаимодействие с пользователем для объекта GoogleMap .

Объект GoogleMap автоматически выполняет следующие операции:

  • Подключение к сервису Google Maps.
  • Загрузка фрагментов карты.
  • Отображение плиток на экране устройства.
  • Отображение различных элементов управления, таких как панорамирование и масштабирование.
  • Реагирование на жесты панорамирования и масштабирования перемещением карты и увеличением или уменьшением масштаба.

Чтобы использовать объект GoogleMap в своем приложении, вы должны использовать объект SupportMapFragment или MapView в качестве объекта-контейнера для карты, а затем извлечь объект GoogleMap из контейнера. Поскольку классы-контейнеры являются производными от фрагмента или представления Android, они предоставляют карте возможности управления жизненным циклом и пользовательского интерфейса своих базовых классов Android. Класс SupportMapFragment — это более современный и распространенный контейнер для объекта GoogleMap .

Посмотреть код

Следующий код взят из полного действия Java, используемого в этом разделе при статическом добавлении фрагмента. Проект Android был создан на основе шаблона проекта Empty, а затем обновлен на основе руководства по настройке проекта . После выполнения действий, описанных в этом разделе, ваш код может отличаться в зависимости от шаблона проекта.

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

Чтобы добавить карту

В этом разделе описывается, как добавить базовую карту, используя фрагмент в качестве контейнера карты; однако вместо этого вы можете использовать представление. Пример см. в разделе RawMapViewDemoActivity на Github.

Основные шаги:

  1. Чтобы получить SDK, получить ключ API и добавить необходимые платформы, выполните действия, описанные в разделе:

    1. Настройка в Google Cloud Console

    2. Используйте ключ API

    3. Настройка проекта Android Studio

  2. Добавьте объект SupportMapFragment в действие, которое будет обрабатывать карту. Вы можете добавлять фрагмент статически или динамически.

  3. OnMapReadyCallback интерфейс OnMapReadyCallback.

  4. Установите файл макета в качестве представления содержимого.

  5. Если вы добавили фрагмент статически, получите дескриптор фрагмента.

  6. Зарегистрируйте обратный звонок.

  7. Получите дескриптор объекта GoogleMap .

Добавьте объект SupportMapFragment.

Вы можете добавить объект SupportMapFragment в свое приложение статически или динамически. Самый простой способ — добавить его статически. Если вы добавляете фрагмент динамически, вы можете выполнять над ним дополнительные действия, например удалять и заменять его во время выполнения.

Статическое добавление фрагмента

В файле макета действия, которое будет обрабатывать карту:

  1. Добавьте элемент fragment .
  2. Добавьте объявление имени xmlns:map="http://schemas.android.com/apk/res-auto" . Это позволяет использовать пользовательские XML-атрибуты maps .
  3. В элементе fragment задайте для атрибута android:name значение com.google.android.gms.maps.SupportMapFragment .
  4. В элементе fragment добавьте атрибут android:id и установите для него идентификатор ресурса R.id.map ( @+id/map ).

Например, вот полный файл макета, который включает элемент 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"/>

Динамическое добавление фрагмента

В деятельности:

  1. Создайте экземпляр SupportMapFragment .
  2. Зафиксируйте транзакцию, которая добавит фрагмент в активность. Дополнительные сведения см. в разделе Транзакции фрагментов .

Например:

Джава


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

      

Котлин


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

      

Реализовать интерфейс OnMapReadyCallback

Обновите объявление активности следующим образом:

Джава


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

      

Котлин


class MainActivity : AppCompatActivity(), OnMapReadyCallback {

    // ...
}

      

Установите представление содержимого

В методе onCreate вашей активности вызовите метод setContentView и установите файл макета в качестве представления содержимого.

Например, если файл макета называется main.xml :

Джава


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

      

Котлин


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

      

Получите дескриптор фрагмента и зарегистрируйте обратный вызов

  1. Чтобы получить дескриптор фрагмента, вызовите метод FragmentManager.findFragmentById и передайте ему идентификатор ресурса фрагмента в файле макета. Если вы добавили фрагмент динамически , пропустите этот шаг, потому что вы уже получили дескриптор.

  2. Вызовите метод getMapAsync , чтобы установить обратный вызов для фрагмента.

Например, если вы добавили фрагмент статически:

Джава


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

      

Котлин


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

      

Получить дескриптор объекта GoogleMap

Используйте метод обратного вызова onMapReady , чтобы получить дескриптор объекта GoogleMap . Обратный вызов запускается, когда карта готова принять пользовательский ввод. Он предоставляет ненулевой экземпляр класса GoogleMap , который можно использовать для обновления карты.

В этом примере обратный вызов onMapReady извлекает дескриптор объекта GoogleMap , а затем на карту добавляется маркер :

Джава


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

      

Котлин


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

      

Скриншот с картой и маркером в центре острова Нуль.

Когда вы успешно создадите и запустите приложение, оно отобразит карту с маркером на Нулевом острове (ноль градусов широты и ноль градусов долготы).

Просмотрите код для полного действия:

Посмотреть завершенное действие


Что дальше

После выполнения этих шагов вы можете настроить параметры карты .