Configurer une carte

Sélectionnez une plate-forme : Android iOS

Pour suivre un trajet dans votre application grand public, vous devez d'abord définir une carte et ajouter la prise en charge des cartes vectorielles, si nécessaire.

Pour configurer une carte dans votre application, procédez comme suit :

  1. Définissez un fragment de carte pour suivre un trajet.
  2. Ajoutez la prise en charge d'une couche de base de carte et d'un contrôleur de vue.
  3. Ajoutez la prise en charge des graphiques vectoriels Android pour afficher des cartes vectorielles, si nécessaire.

Une fois que vous avez défini une carte, vous pouvez ajouter des vues supplémentaires et des commandes de caméra pour personnaliser l'expérience visuelle. Pour en savoir plus, consultez Appliquer un style à une carte.

Étape 1 : Définir un fragment de carte pour suivre un trajet

Vous définissez une carte en ajoutant un fragment ou une vue de carte pour créer la carte sur laquelle vous partagez un trajet à la demande dans votre application grand public. Pour définir votre carte, suivez l'une des méthodes suivantes :

  • ConsumerMapFragment : utilisez-la pour définir votre carte avec un Fragment.

  • ConsumerMapView : utilisez-la pour définir une carte avec une View.

Les fonctionnalités sont les mêmes pour les deux méthodes. Choisissez celle qui convient le mieux à votre application.

Les deux méthodes sont expliquées plus en détail dans la section suivante.

Ajouter un fragment ou une vue de carte

Pour créer une carte permettant d'afficher la progression du trajet à l'aide d'un fragment ou d'une vue Android, procédez comme suit et reportez-vous aux exemples de code.

  1. Définissez un fragment ou une vue dans le fichier XML de mise en page de votre application situé dans /res/layout. Définissez la carte du trajet comme un fragment à l'aide de ConsumerMapFragment ou comme une vue à l'aide de ConsumerMapView.

    Le fragment ou la vue fournit ensuite un accès à la carte du trajet à laquelle votre application peut accéder et qu'elle peut modifier. La carte fournit également un handle au ConsumerController, ce qui permet à votre application de contrôler et de personnaliser l'expérience utilisateur.

  2. À partir de votre méthode onCreate(), appelez getConsumerGoogleMapAsync(callback), qui renvoie le ConsumerGoogleMap de manière asynchrone dans le rappel.

  3. Utilisez le ConsumerGoogleMap pour afficher la progression du trajet et le mettre à jour si nécessaire.

Exemple d'ajout de ConsumerMapFragment

  1. Définissez le fragment dans le fichier XML de mise en page de votre application, comme indiqué dans l'exemple de code suivant.

    <fragment
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:name="com.google.android.libraries.mapsplatform.transportation.consumer.view.ConsumerMapFragment"
        android:id="@+id/consumer_map_fragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
    
  2. Appelez getConsumerGoogleMapAsync() à partir de la méthode onCreate().

Java

 public class SampleAppActivity extends AppCompatActivity {

   @Override
   protected void onCreate(Bundle savedInstanceState) {

     // Find the ConsumerMapFragment.
     ConsumerMapFragment consumerMapFragment =
         (ConsumerMapFragment) fragmentManager.findFragmentById(R.id.consumer_map_fragment);

     // Initiate the callback that returns the map.
     if (consumerMapFragment != null) {
       consumerMapFragment.getConsumerGoogleMapAsync(
           new ConsumerMapReadyCallback() {
             // The map returned in the callback is used to access the ConsumerController.
             @Override
             public void onConsumerMapReady(@NonNull ConsumerGoogleMap consumerGoogleMap) {
               ConsumerController consumerController = consumerGoogleMap.getConsumerController();
             }
           });
     }
   }

 }

Kotlin

 class SampleAppActivity : AppCompatActivity() {
   override fun onCreate(savedInstanceState: Bundle?) {
     // Find the ConsumerMapFragment.
     val consumerMapFragment =
       fragmentManager.findFragmentById(R.id.consumer_map_fragment) as ConsumerMapFragment

     consumerMapFragment.getConsumerGoogleMapAsync(
       object : ConsumerMapReadyCallback() {
         override fun onConsumerMapReady(consumerGoogleMap: ConsumerGoogleMap) {
           val consumerController = consumerGoogleMap.getConsumerController()!!
         }
       }
     )
   }
 }

Exemple d'ajout de ConsumerMapView

  1. Utilisez la vue dans un fragment ou dans une activité, comme défini dans votre fichier XML.

     <com.google.android.libraries.mapsplatform.transportation.consumer.view.ConsumerMapView
         xmlns:android="http://schemas.android.com/apk/res/android"
         android:id="@+id/consumer_map_view"
         android:layout_width="match_parent"
         android:layout_height="match_parent" />
    
  2. Appelez getConsumerGoogleMapAsync() à partir de onCreate(). En plus du paramètre de rappel, incluez les informations suivantes :

    • L'activité ou le fragment contenant. La classe de base de l'activité ou du fragment doit être un FragmentActivity ou un Fragmentde support (respectivement), car ils permettent d'accéder à son cycle de vie.

    • GoogleMapOptions (qui peut être nul), contenant des attributs de configuration pour le MapView.

Java

public class SampleAppActivity extends AppCompatActivity {

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    ConsumerMapView mapView = findViewById(R.id.consumer_map_view);

    if (mapView != null) {
      mapView.getConsumerGoogleMapAsync(
          new ConsumerMapReadyCallback() {
            // The map returned in the callback is used to access the ConsumerController.
            @Override
            public void onConsumerMapReady(@NonNull ConsumerGoogleMap consumerGoogleMap) {
              ConsumerController consumerController = consumerGoogleMap.getConsumerController();
            }
          }, this, null);
    }
  }

}

Kotlin

class SampleAppActivity : AppCompatActivity() {
  override fun onCreate(savedInstanceState: Bundle?) {
    val mapView = findViewById(R.id.consumer_map_view) as ConsumerMapView

    mapView.getConsumerGoogleMapAsync(
      object : ConsumerMapReadyCallback() {
        // The map returned in the callback is used to access the ConsumerController.
        override fun onConsumerMapReady(consumerGoogleMap: ConsumerGoogleMap) {
          val consumerController = consumerGoogleMap.getConsumerController()!!
        }
      },
      /* fragmentActivity= */ this,
      /* googleMapOptions= */ null,
    )
  }
}

Un MapView dans un fragment est identique à l'exemple précédent pour MapView dans une activité, sauf que le fragment gonfle la mise en page qui inclut le MapView dans la méthode onCreateView() du fragment.

Java

public class MapViewInFragment extends Fragment {

  @Override
  public View onCreateView(
      @NonNull LayoutInflater layoutInflater,
      @Nullable ViewGroup viewGroup,
      @Nullable Bundle bundle) {
    return layoutInflater.inflate(R.layout.consumer_map_view, viewGroup, false);
  }

}

Kotlin

class MapViewInFragment : Fragment() {
  override fun onCreateView(
    layoutInflater: LayoutInflater,
    container: ViewGroup?,
    savedInstanceState: Bundle?,
  ): View {
    return layoutInflater.inflate(R.layout.consumer_map_view, viewGroup, false)
  }
}

Étape 2 : Ajouter la prise en charge d'une couche de base de carte et d'un contrôleur de vue

Pour partager la progression du trajet dans votre application, ajoutez les classes suivantes à votre application : ConsumerGoogleMap et ConsumerController.

  • Obtenez ConsumerGoogleMap à partir de ConsumerMapFragment ou de ConsumerMapView, qui renvoient tous deux de manière asynchrone ConsumerGoogleMap dans ConsumerMapReadyCallback.

    ConsumerGoogleMap est une classe wrapper pour la classe GoogleMap. Elle utilise une API équivalente à GoogleMap afin que votre application puisse interagir avec la carte. De cette façon, votre application peut interagir de manière transparente avec la même carte Google sous-jacente. Par exemple, GoogleMap n'autorise qu'un seul enregistrement de rappel, mais ConsumerGoogleMap prend en charge les rappels enregistrés doubles. Ces rappels permettent à votre application d'enregistrer des rappels qui sont appelés de manière séquentielle.

  • Obtenez ConsumerController à partir de ConsumerGoogleMap dans getConsumerController().

    ConsumerController permet d'accéder aux fonctionnalités de partage de trajets, telles que la surveillance des trajets, le contrôle de l'état des trajets et la définition des lieux.

Pour savoir comment ajouter ConsumerGoogleMap et ConsumerController à votre application en Java et Kotlin, consultez les exemples suivants.

Java

private ConsumerGoogleMap consumerGoogleMap;
private ConsumerController consumerController;
private ConsumerMapView consumerMapView;

consumerMapView.getConsumerGoogleMapAsync(
    new ConsumerMapReadyCallback() {
      @Override
      public void onConsumerMapReady(@NonNull ConsumerGoogleMap consumerMap) {
        consumerGoogleMap = consumerMap;
        consumerController = consumerMap.getConsumerController();
      }
    },
    this, null);

Kotlin

var consumerGoogleMap: ConsumerGoogleMap
var consumerController: ConsumerController
val consumerMapView = findViewById(R.id.consumer_map_view) as ConsumerMapView

consumerMapView.getConsumerGoogleMapAsync(
  object : ConsumerMapReadyCallback() {
    override fun onConsumerMapReady(consumerMap: ConsumerGoogleMap) {
      consumerGoogleMap = consumerMap
      consumerController = consumerMap.getConsumerController()
    },
    /* fragmentActivity= */ this,
    /* googleMapOptions= */ null,
  }
)

Étape 3 : Ajouter la prise en charge des graphiques vectoriels Android

Si la conception de votre application nécessite la prise en charge des graphiques vectoriels, ajoutez la prise en charge des appareils Android et des drawables vectoriels en procédant comme suit :

  1. Ajoutez le code suivant à votre activité. Ce code étend AppCompatActivity pour utiliser les drawables vectoriels dans le SDK Consumer.

Java

// ...
import android.support.v7.app.AppCompatActivity;

// ...

public class ConsumerTestActivity extends AppCompatActivity {
  // ...
}

Kotlin

// ...
import android.support.v7.app.AppCompatActivity

// ...

class ConsumerTestActivity : AppCompatActivity() {
  // ...
}

Étape suivante

Suivre un trajet sur Android

Appliquer un style à une carte