Tworzenie wspólnych przejazdów

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:

Podstawowe informacje o tworzeniu podróży

W tej sekcji opisano szczegóły żądania, które są niezbędne do utworzenia przejazdu w Fleet Engine. Wysyłasz żądanie utworzenia za pomocą gRPC lub REST.

  • Metoda CreateTrip(): gRPC lub REST
  • CreateTripRequest komunikat: dotyczy tylko gRPC

Pola dotyczące 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. Pola opcjonalne możesz podać podczas tworzenia podróży lub ustawić je później podczas jej aktualizowania.

Pola podróży
Nazwa Wymagany? Opis
parent Tak Ciąg tekstowy zawierający identyfikator projektu. Identyfikator musi być taki sam we wszystkich integracjach z Fleet Engine, z tymi samymi rolami konta usługi.
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 Ustaw TripType na jedną z tych wartości, aby utworzyć odpowiedni typ podróży:
  • Jedno miejsce docelowe: ustaw wartość SHARED lub EXCLUSIVE.
  • Wiele miejsc docelowych: ustaw na EXCLUSIVE.
  • Back-to-back (z powrotem): ustaw na EXCLUSIVE.
  • Wspólne udostępnianie: ustaw SHARED.
punkt_odbioru Tak Punkt początkowy podróży.
Miejsca docelowe pośrednie 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 w przypadku przejazdów współdzielonych: to pole obsługuje przeplatanie punktów pośrednich z różnych przejazdów. Zawiera wszystkie pozostałe punkty na trasie przypisanego pojazdu, a także jako punkty na trasie wyjazdu i przyjazdu. To pole możesz ustawić, wywołując funkcję CreateTrip lub UpdateTrip. Możesz też zaktualizuj punkty pośrednie pojazdu w polu waypoints za pomocą połączenie z numerem UpdateVehicle. Ze względu na ochronę prywatności usługa nie zwraca tych informacji w przypadku połączeń GetTrip.

number_of_passengers Nie Liczba pasażerów w podróży.
dropoff_point Nie Miejsce docelowe podróży.
vehicle_id Nie Identyfikator pojazdu przypisanego do przejazdu.

Przykład: tworzenie wspólnej podróży z wielu osób

Ten przykład integracji z backendem pokazuje, jak utworzyć przejazd i przypisać go do pojazdu jako przejazd współdzielony.

// 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 przejazdów w ramach wspólnego użytkowania musisz określić kolejność nieodwiedzionych punktów pośrednich w zbiorze punktów pośrednich pojazdu (Trip.vehicle_waypoints). Fleet Engine używa tej listy do automatycznej aktualizacji punktów pośrednich wszystkich przejazdów w ramach wspólnego użytkowania.

Rozważmy na przykład 2 podróże w ramach wspólnej puli: Podróż APodróż B:

  • Podróż A jest w drodze do miejsca docelowego.
  • Następnie do tego samego pojazdu dodajesz Trasa B.

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órRezygnacjaB Rezygnacja.

  • Połączenie z numerem getVehicle() zwraca remainingWaypoints zawierające:
    B OdbiórRezygnacjaB Rezygnacja.
  • getTrip() lub wywołanie zwrotne onTripRemainingWaypointsUpdatedpodróży A zwraca remainingWaypoints, które zawierają:
    B OdbiórA Wysiadanie.
  • getTrip() lub wywołanie funkcji onTripRemainingWaypointsUpdatedPodróż B zwraca remainingWaypoints zawierające:
    Odbiór B → Odstawienie A → Odstawienie B.

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

Co dalej?