Tworzenie podróży obejmujących wiele miejsc docelowych

W tym dokumencie opisujemy, jak utworzyć podróż obejmującą wiele miejsc docelowych, jak ustawić prawidłowe i przypisać je do pojazdu, który ma je wypełnić. Zakładamy, że masz skonfigurowaną flotę masz już utworzone pojazdy, działającą aplikację kierowcy i opcjonalnie aplikację konsumencką. Musisz też znać różne opcje podróży w przypadku podróży na żądanie. Zobacz te powiązane przewodniki dotyczące które:

Podstawowe informacje o tworzeniu podróży

Ta sekcja zawiera szczegóły prośby niezbędne do utworzenia podróży po Fleet Engine. Wysyłasz żądanie utworzenia za pomocą gRPC lub REST.

  • Metoda CreateTrip(): gRPC lub REST
  • Komunikat CreateTripRequest: tylko gRPC

Pola podróży

Użyj poniższych pól, aby utworzyć podróż we Fleet Engine. Możesz użyć różnych pola dla różnych rodzajów podróży: pojedynczej lub wielu miejsc docelowych, lub wspólne podróże. Ty może wypełnić pola opcjonalne podczas tworzenia podróży lub można je ustawić później, gdy zaktualizujesz podróż.

Pola podróży
Nazwa Wymagana? Opis
parent Tak Ciąg tekstowy zawierający identyfikator projektu. Ten identyfikator musi być taki sam, jak używany w całej integracji Fleet Engine z tym samym kontem usługi role.
trip_id Tak Utworzony przez Ciebie ciąg znaków jednoznacznie identyfikujący tę podróż. Identyfikatory podróży zawierają pewnych ograniczeń, które określono w pliku referencyjnym.
trip_type Tak W polu TripType ustaw następujące wartości dla tworzonego typu podróży:
  • Pojedyncze miejsce docelowe: ustaw SHARED lub EXCLUSIVE.
  • Wiele miejsc docelowych: ustaw wartość EXCLUSIVE.
  • Do tyłu: ustaw EXCLUSIVE.
  • Wspólne udostępnianie: ustaw SHARED.
pickup_point Tak Punkt początkowy podróży.
Średnie miejsca docelowe Tak

Tylko podróże do wielu miejsc docelowych: lista pośrednich miejsc docelowych, które kierowca odwiedza pomiędzy tymi miejscami. odbiór i zwrot. Tak jak dropoff_point, to pole Można również ustawić ją później, wywołując UpdateTrip, ale do wielu miejsc docelowych podróż z definicji zawiera miejsca docelowe pośrednie.

vehicle_waypoints Tak

Tylko podróże w ramach wspólnego puli: to pole obsługuje przeplatanie punktów pośrednich z wielu przejazdów. Zawiera wszystkie pozostałe punkty na trasie przypisanego pojazdu, a także jako punkty na trasie wyjazdu i przyjazdu. Możesz wybrać to pole zadzwoń pod numer CreateTrip lub UpdateTrip. Możesz też zaktualizuj punkty pośrednie pojazdu w polu waypoints za pomocą połączenie z numerem UpdateVehicle. Usługa nie zwraca tych informacji w przypadku wywołań funkcji GetTrip ze względu na ochronę prywatności.

number_of_passengers Nie Liczba pasażerów na trasie.
dropoff_point Nie Cel podróży.
vehicle_id Nie Identyfikator pojazdu przypisanego do podróży.

Przykład: tworzenie podróży obejmującej wiele miejsc docelowych

Poniższy przykład pokazuje, jak utworzyć wyjątkową podróż obejmującą wiele miejsc docelowych z punktem odbioru, miejscem nadania i jednym pośrednim miejscem docelowym.

static final String PROJECT_ID = "my-rideshare-co-gcp-project";
static final String TRIP_ID = "multi-destination-trip-A";

TripServiceBlockingStub tripService = TripService.newBlockingStub(channel);

// Trip initial settings.
String parent = "providers/" + PROJECT_ID;

Trip trip = Trip.newBuilder()
    .setTripType(TripType.EXCLUSIVE)
    .setPickupPoint(
        TerminalLocation.newBuilder().setPoint(
            LatLng.newBuilder()
                .setLatitude(-6.195139).setLongitude(106.820826)))
    .setNumberOfPassengers(1)
    .setDropoffPoint(
        TerminalLocation.newBuilder().setPoint(
            LatLng.newBuilder()
                .setLatitude(-6.1275).setLongitude(106.6537)))
    // Add the list of intermediate destinations.
    .addAllIntermediateDestinations(
        ImmutableList.of(
            TerminalLocation.newBuilder().setPoint(
                LatLng.newBuilder()
                    .setLatitude(-6.195139).setLongitude(106.820826)).build()))
    .build();

// Create the Trip request.
CreateTripRequest createTripRequest = CreateTripRequest.newBuilder()
    .setParent(parent)
    .setTripId(TRIP_ID)  // Trip ID assigned by the Provider server.
    .setTrip(trip)       // Initial state is NEW.
    .build();

// Error handling.
try {
  Trip createdTrip =
      tripService.createTrip(createTripRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
    case ALREADY_EXISTS:  // Trip already exists.
      break;
    case PERMISSION_DENIED:
      break;
  }
  return;
}

Aktualizacja podróży obejmującej wiele miejsc docelowych

Musisz skonfigurować podróż za pomocą identyfikatora pojazdu, aby usługa Fleet Engine mogła śledzić pojazdem na trasie. Więcej informacji o aktualizowaniu podróży znajdziesz w aktualizować podróże i zarządzać ich stanem;

Jeśli nie podasz miejsca docelowego lub pośredniego miejsca docelowego podczas utwórz podróż, zawsze możesz to zrobić w tym momencie.

Przykładowa aktualizacja podróży

Poniżej pokazujemy, jak zaktualizować podróż, aby dodać listę średnio zaawansowanych miejsca docelowe i ustaw identyfikator pojazdu.

static final String PROJECT_ID = "my-rideshare-co-gcp-project";
static final String TRIP_ID = "multi-destination-trip-A";

String tripName = "providers/" + PROJECT_ID + "/trips/" + TRIP_ID;

TripServiceBlockingStub tripService = TripService.newBlockingStub(channel);

// The trip settings to be updated.
Trip trip = Trip.newBuilder()
    // Add the list of intermediate destinations.
    .addAllIntermediateDestinations(
        ImmutableList.of(
            TerminalLocation.newBuilder().setPoint(
                LatLng.newBuilder()
                    .setLatitude(-6.195139).setLongitude(106.820826)).build()))
    .setVehicleId("8241890")
    .build();

// The trip update request.
UpdateTripRequest updateTripRequest = UpdateTripRequest.newBuilder()
    .setName(tripName)
    .setTrip(trip)
    .setUpdateMask(
        FieldMask.newBuilder()
            .addPaths("intermediate_destinations")
            .addPaths("vehicle_id")
            .build())
    .build();

// Error handling.
try {
  Trip updatedTrip =
      tripService.updateTrip(updateTripRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
    case NOT_FOUND:            // The trip doesn't exist.
      break;
    case PERMISSION_DENIED:
      break;
  }
  return;
}

Zarządzanie stanem podróży do wielu miejsc docelowych

Określasz stan podróży, używając jednego z wyliczeń TripStatus . Gdy stan podróży zmieni się, np. z ENROUTE_TO_PICKUP na ARRIVED_AT_PICKUP, musisz zaktualizować stan podróży we Fleet Engine. Podróż stan zawsze zaczyna się od wartości NEW i kończy wartością albo COMPLETE lub CANCELED.

W przypadku podróży do wielu miejsc, oprócz aktualizowania stanu podróży jak w przypadku podróży do jednego miejsca docelowego, musisz również zaktualizować następujące dane: za każdym razem, gdy pojazd dotrze do pośredniego miejsca docelowego:

  • intermediateDestinationIndex
  • intermediateDestinationsVersion

Aby to zrobić, użyj wartości z wyliczenia TripStatus.

  • ENROUTE_TO_PICKUP
  • ARRIVED_AT_PICKUP
  • ENROUTE_TO_INTERMEDIATE_DESTINATION
  • ARRIVED_AT_INTERMEDIATE_DESTINATION
  • ENROUTE_TO_DROPOFF
  • COMPLETE

Przykładowa podróż z miejscami docelowymi o średnim stopniu trudności

Z tego artykułu dowiesz się, jak utworzyć podróż obejmującą wiele miejsc docelowych, która zakończyła się i jest w drodze do pierwszego miejsca docelowego pośredniego.

static final String PROJECT_ID = "my-rideshare-co-gcp-project";
static final String TRIP_ID = "multi-destination-trip-A";

String tripName = "providers/" + PROJECT_ID + "/trips/" + TRIP_ID;

// Get the trip object from either the Fleet Engine or storage.
Trip trip = …;

TripServiceBlockingStub tripService = TripService.newBlockingStub(channel);

// The trip settings to be updated.
Trip trip = Trip.newBuilder()
    // Trip status cannot return to a previous state once it has passed.
    .setTripStatus(TripStatus.ENROUTE_TO_INTERMEDIATE_DESTINATION)

    // Enroute to the first intermediate destination.
    .setIntermediateDestinationIndex(0)

    // You must provide an intermediate_destinations_version to ensure that you
    // have the same intermediate destinations list as the Fleet Engine.
    .setIntermediateDestinationsVersion(
         trip.getIntermediateDestinationsVersion())
    .build();

// The trip update request.
UpdateTripRequest updateTripRequest = UpdateTripRequest.newBuilder()
    .setName(tripName)
    .setTrip(trip)
    .setUpdateMask(
        FieldMask.newBuilder()
            .addPaths("trip_status")
            .addPaths("intermediate_destination_index")
            // intermediate_destinations_version must not be in the update mask.
            .build())
    .build();

// Error handling.
try {
  Trip updatedTrip =
      tripService.updateTrip(updateTripRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
    case NOT_FOUND:            // The trip doesn't exist.
      break;
    case FAILED_PRECONDITION:  // Either the trip status is invalid, or the
                               // intermediate_destinations_version doesn't
                               // match Fleet Engine's.
      break;
    case PERMISSION_DENIED:
      break;
  }
  return;
}

Co dalej?