Dokumen ini menjelaskan cara membuat perjalanan penggabungan bersama, menetapkan dan menugaskannya ke sebuah kendaraan untuk dipenuhi. Anda dianggap telah menyiapkan Fleet Engine, Anda telah membuat kendaraan, memiliki aplikasi pengemudi yang berfungsi, dan secara opsional, aplikasi konsumen. Anda juga harus terbiasa dengan berbagai skenario yang tersedia untuk perjalanan on demand. Lihat panduan terkait berikut untuk bahwa:
- Menyiapkan Fleet Engine
- Membuat kendaraan
- Skenario perjalanan di ringkasan Perjalanan on-demand
Dasar-dasar pembuatan perjalanan
Bagian ini menjelaskan detail permintaan yang diperlukan untuk membuat perjalanan di Fleet Engine. Anda mengirimkan permintaan pembuatan menggunakan gRPC dan REST.
Kolom Perjalanan
Gunakan kolom berikut untuk membuat perjalanan di Fleet Engine. Anda dapat menggunakan isian untuk berbagai jenis perjalanan: tujuan tunggal atau multi-tujuan, perjalanan berurutan, atau penggabungan bersama. Anda dapat menyediakan kolom opsional saat Anda membuat perjalanan, atau Anda dapat mengaturnya nanti saat Anda memperbarui perjalanan.
Nama | Wajib? | Deskripsi |
---|---|---|
induk | Ya | String yang menyertakan project ID. ID ini harus sama dengan ID yang digunakan di seluruh integrasi Fleet Engine Anda, dengan akun layanan yang sama peran. |
trip_id | Ya | String yang Anda buat yang mengidentifikasi perjalanan ini secara unik. ID perjalanan memiliki batasan tertentu, seperti yang ditunjukkan dalam referensi. |
trip_type | Ya | Tetapkan TripType ke nilai berikut untuk jenis perjalanan yang Anda buat:
|
pickup_point | Ya | Titik asal perjalanan. |
Tujuan menengah | Ya | Khusus perjalanan multi-tujuan: Daftar tujuan perantara yang dikunjungi pengemudi di antara tujuan
penjemputan dan pengantaran pesanan. Seperti halnya |
vehicle_waypoints | Ya | Khusus perjalanan penggabungan bersama: Kolom ini mendukung penyisipan titik jalan dari beberapa perjalanan.
Pesan ini berisi semua titik jalan yang tersisa untuk kendaraan yang ditugaskan,
sebagai titik jalan penjemputan dan
pengantaran untuk perjalanan ini. Anda dapat menetapkan kolom ini
dengan memanggil |
number_of_passengers | Tidak | Jumlah penumpang dalam perjalanan. |
dropoff_point | Tidak | Tujuan perjalanan. |
vehicle_id | Tidak | ID kendaraan yang ditetapkan untuk perjalanan. |
Contoh: membuat perjalanan penggabungan bersama
Contoh integrasi backend berikut menunjukkan cara membuat perjalanan dan menetapkannya ke sebuah kendaraan sebagai perjalanan gabungan bersama.
// 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;
}
Perbarui perjalanan penggabungan bersama
Setiap perjalanan yang dibuat di Fleet Engine harus ditetapkan ke kendaraan agar Fleet Engine dapat menghitung perkiraan waktu tiba (ETA) perjalanan dan melacaknya. Anda dapat melakukannya selama pembuatan perjalanan atau nanti saat memperbarui perjalanan.
Untuk perjalanan berbagi tumpangan, Anda harus menentukan urutan ke titik jalan yang tidak dikunjungi dalam kumpulan titik jalan kendaraan perjalanan (Trip.vehicle_waypoints
). Fleet Engine menggunakan daftar ini untuk otomatis memperbarui titik jalan perjalanan untuk semua perjalanan dalam kumpulan bersama.
Misalnya, pertimbangkan dua perjalanan dengan pool bersama, Perjalanan A dan Perjalanan B:
- Perjalanan A sedang dalam perjalanan ke lokasi pengantaran.
- Perjalanan B kemudian ditambahkan ke kendaraan yang sama.
Dalam satu UpdateTripRequest
untuk Perjalanan B,
Anda menetapkan vehicleId
, dan juga menetapkan Trip.vehicle_waypoints
ke urutan titik jalan
yang optimal: B Penjemputan
→ A Penurunan →
B Penurunan.
- Memanggil
getVehicle()
akan menampilkanremainingWaypoints
yang berisi:
B Pengambilan → Pulang kerja → B Berpaling. - Baik
getTrip()
maupun CallbackonTripRemainingWaypointsUpdated
untuk Perjalanan A akan menampilkanremainingWaypoints
yang berisi:
B Pengambilan → Drop-off. - Baik
getTrip()
maupun CallbackonTripRemainingWaypointsUpdated
untuk Perjalanan B mengembalikanremainingWaypoints
yang berisi:
B Pengambilan → Drop-off → B Berpaling.
Contoh
Contoh integrasi backend berikut menunjukkan cara memperbarui perjalanan dengan ID kendaraan dan titik jalan untuk dua perjalanan kolam renang bersama.
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;
}