Z tego dokumentu dowiesz się, jak utworzyć udostępnioną podróż w ramach wspólnego przejazdu, ustawić prawidłową 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: utwórz udostępnioną podróż
Poniższy przykład integracji backendu pokazuje, jak utworzyć podróż i przypisać je do pojazdu w ramach wspólnego korzystania z usługi.
// Vehicle with VEHICLE_ID ID is already created and it is assigned Trip A.
static final String PROJECT_ID = "my-rideshare-co-gcp-project";
static final String TRIP_ID = "shared-trip-A";
static final String VEHICLE_ID = "your-vehicle-id";
static final String TRIP_A_ID = "trip-a-id";
static final String TRIP_B_ID = "trip-b-id";
TripServiceBlockingStub tripService = TripService.newBlockingStub(channel);
String parent = "providers/" + PROJECT_ID;
LatLng tripBPickup =
LatLng.newBuilder().setLatitude(-12.12314).setLongitude(88.142123).build();
LatLng tripBDropoff =
LatLng.newBuilder().setLatitude(-14.12314).setLongitude(90.142123).build();
TerminalLocation tripBPickupTerminalLocation =
TerminalLocation.newBuilder().setPoint(tripBPickup).build();
TerminalLocation tripBDropoffTerminalLocation =
TerminalLocation.newBuilder().setPoint(tripBDropoff).build();
// TripA already exists and it's assigned to a vehicle with VEHICLE_ID ID.
Trip tripB = Trip.newBuilder()
.setTripType(TripType.SHARED)
.setVehicleId(VEHICLE_ID)
.setPickupPoint(tripBPickupTerminalLocation)
.setDropoffPoint(tripBDropoffTerminalLocation)
.addAllVehicleWaypoints(
// This is where you define the arrival order for unvisited waypoints.
// If you don't specify an order, then the Fleet Engine adds Trip B's
// waypoints to the end of Trip A's.
ImmutableList.of(
// Trip B's pickup point.
TripWaypoint.newBuilder()
.setLocation(tripBPickupTerminalLocation)
.setTripId(TRIP_B_ID)
.setWaypointType(WaypointType.PICKUP_WAYPOINT_TYPE)
.build(),
// Trip A's drop-off point.
TripWaypoint.newBuilder()
.setLocation(tripA.getDropoffPoint())
.setTripId(TRIP_A_ID)
.setWaypointType(WaypointType.DROP_OFF_WAYPOINT_TYPE)
.build(),
// Trip B's drop-off point.
TripWaypoint.newBuilder()
.setLocation(tripBDropoffTerminalLocation)
.setTripId(TRIP_B_ID)
.setWaypointType(WaypointType.DROP_OFF_WAYPOINT_TYPE)
.build()))
.build();
// Create Trip request
CreateTripRequest createTripRequest = CreateTripRequest.newBuilder()
.setParent(parent)
.setTripId(TRIP_B_ID)
.setTrip(tripB)
.build();
try {
// createdTrip.remainingWaypoints will contain shared-pool waypoints.
// [tripB.pickup, tripA.dropoff, tripB.dropoff]
Trip createdTrip = tripService.createTrip(createTripRequest);
} catch (StatusRuntimeException e) {
Status s = e.getStatus();
switch (s.getCode()) {
case ALREADY_EXISTS:
break;
case PERMISSION_DENIED:
break;
}
return;
}
Zaktualizuj wspólne podróże w ramach wspólnego basenu
Podróż utworzona we Fleet Engine musi być przypisana do pojazdu, aby Fleet Engine oblicza i śledzi szacowany czas dotarcia na miejsce. Możesz to zrobić podczas podczas tworzenia podróży lub później, gdy ją zaktualizujesz.
W przypadku wspólnych podróży w ramach puli musisz określić kolejność do nieodwiedzonych punktów pośrednich
w zbiorze punktów na trasie pojazdu (Trip.vehicle_waypoints
). Flota
Wyszukiwarka używa tej listy do automatycznego aktualizowania punktów na trasie wszystkich przejazdów
ze wspólnej puli.
Weźmy na przykład 2 wycieczki w ramach wspólnego basenu, Podróż A i Podróż B:
- Podróż A jest w drodze do miejsca docelowego.
- Następnie zostanie dodana Podróż B do tego samego pojazdu.
W jednej UpdateTripRequest
w ramach Podróży B:
ustawiasz parametr vehicleId
, a także ustawiasz Trip.vehicle_waypoints
na optymalną
zamówienie punktu pośredniego: B Odbiór
→ Rezygnacja →
B Rezygnacja.
- Połączenie z numerem
getVehicle()
zwracaremainingWaypoints
zawierające:
B Odbiór → Rezygnacja → B Rezygnacja. - Może to być
getTrip()
alboonTripRemainingWaypointsUpdated
oddzwanianie dla Podróż A zwracaremainingWaypoints
zawierające:
B Odbiór → Rezygnacja. - Może to być
getTrip()
alboonTripRemainingWaypointsUpdated
oddzwanianie dla Podróż B zwracaremainingWaypoints
zawierające:
B Odbiór → Rezygnacja → B Rezygnacja.
Przykład
Poniższy przykład integracji backendu pokazuje, jak zaktualizować podróż za pomocą identyfikator pojazdu i punkty na trasie w przypadku dwóch wspólnych przejazdów.
static final String PROJECT_ID = "my-rideshare-co-gcp-project";
static final String TRIP_A_ID = "share-trip-A";
static final String TRIP_B_ID = "share-trip-B";
static final String VEHICLE_ID = "Vehicle";
String tripName = "providers/" + PROJECT_ID + "/trips/" + TRIP_B_ID;
// Get Trip A and Trip B objects from either the Fleet Engine or storage.
Trip tripA = …;
Trip tripB = …;
TripServiceBlockingStub tripService = TripService.newBlockingStub(channel);
// The trip settings to update.
Trip trip = Trip.newBuilder()
.setVehicleId(VEHICLE_ID)
.addAllVehicleWaypoints(
// This is where you define the arrival order for unvisited waypoints.
// If you don't specify an order, then the Fleet Engine adds Trip B's
// waypoints to the end of Trip A's.
ImmutableList.of(
// Trip B's pickup point.
TripWaypoint.newBuilder()
.setLocation(tripB.getPickupPoint())
.setTripId(TRIP_B_ID)
.setWaypointType(WaypointType.PICKUP_WAYPOINT_TYPE)
.build(),
// Trip A's drop-off point.
TripWaypoint.newBuilder()
.setLocation(tripA.getDropoffPoint())
.setTripId(TRIP_A_ID)
.setWaypointType(WaypointType.DROP_OFF_WAYPOINT_TYPE)
.build(),
// Trip B's drop-off point.
TripWaypoint.newBuilder()
.setLocation(tripB.getDropoffPoint())
.setTripId(TRIP_B_ID)
.setWaypointType(WaypointType.DROP_OFF_WAYPOINT_TYPE)
.build()))
.build();
// The trip update request.
UpdateTripRequest updateTripRequest = UpdateTripRequest.newBuilder()
.setName(tripName)
.setTrip(trip)
.setUpdateMask(FieldMask.newBuilder()
.addPaths("vehicle_id")
.addPaths("vehicle_waypoints"))
.build();
// Error handling. If Fleet Engine has both a trip and vehicle with the IDs,
// and if the credentials validate, and if the given vehicle_waypoints list
// is valid, then the service updates the trip.
try {
Trip updatedTrip = tripService.updateTrip(updateTripRequest);
} catch (StatusRuntimeException e) {
Status s = e.getStatus();
switch (s.getCode()) {
case NOT_FOUND: // Either the trip or vehicle does not exist.
break;
case PERMISSION_DENIED:
break;
case INVALID_REQUEST: // vehicle_waypoints is invalid.
break;
}
return;
}