W tym dokumencie opisujemy, jak utworzyć podróż obejmującą wiele miejsc docelowych, ustawić poprawne 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:
- Skonfiguruj Fleet Engine
- Tworzenie pojazdu
- Scenariusze podróży w sekcji Podróże na żądanie
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.
.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óż.
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:
|
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 |
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 |
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;
}