این سند نحوه ایجاد یک سفر اشتراکی، تنظیم فیلدهای صحیح و اختصاص آن به یک وسیله نقلیه برای انجام را شرح میدهد. فرض بر این است که شما Fleet Engine را راهاندازی کردهاید، وسایل نقلیه ایجاد کردهاید، یک برنامه راننده فعال و در صورت تمایل، یک برنامه مصرفکننده دارید. همچنین باید با سناریوهای مختلف سفر موجود برای سفرهای درخواستی آشنا باشید. برای این منظور به راهنماهای مرتبط زیر مراجعه کنید:
- موتور ناوگان را تنظیم کنید
- ایجاد وسیله نقلیه
- سناریوهای سفر در نمای کلی سفرهای درخواستی
اصول اولیه ایجاد سفر
این بخش جزئیات درخواست لازم برای ایجاد یک سفر در Fleet Engine را شرح میدهد. شما با استفاده از gRPC و REST درخواست ایجاد را ارسال میکنید.
زمینههای سفر
برای ایجاد یک سفر در Fleet Engine از فیلدهای زیر استفاده کنید. میتوانید از فیلدهای مختلف برای انواع مختلف سفرها استفاده کنید: سفرهای تک یا چند مقصدی، سفرهای پشت سر هم یا سفرهای اشتراکی. میتوانید فیلدهای اختیاری را هنگام ایجاد سفر ارائه دهید، یا میتوانید بعداً هنگام بهروزرسانی سفر، آنها را تنظیم کنید.
| نام | الزامی است؟ | توضیحات |
|---|---|---|
| والدین | بله | رشتهای که شامل شناسه پروژه است. این شناسه باید همان شناسهای باشد که در کل یکپارچهسازی Fleet Engine شما، با همان نقشهای حساب سرویس، استفاده میشود. |
| شناسه سفر | بله | رشتهای که شما ایجاد میکنید و به طور منحصر به فرد این سفر را مشخص میکند. شناسههای سفر محدودیتهای خاصی دارند، همانطور که در مرجع ذکر شده است. |
| نوع_سفر | بله | برای نوع سفری که ایجاد میکنید، TripType را روی مقادیر زیر تنظیم کنید:
|
| نقطه برداشت | بله | نقطه مبدا سفر. |
| مقاصد میانی | بله | فقط سفرهای چند مقصدی : فهرست مقصدهای میانی که راننده بین سوار شدن و پیاده کردن مسافر از آنها بازدید میکند. همانند |
| نقاط مسیر وسیله نقلیه | بله | فقط سفرهای اشتراکی : این فیلد از ادغام نقاط مسیر از چندین سفر پشتیبانی میکند. این فیلد شامل تمام نقاط مسیر باقیمانده برای وسیله نقلیه اختصاص داده شده و همچنین نقاط مسیر سوار و پیاده شده برای این سفر است. میتوانید این فیلد را با فراخوانی |
| تعداد_مسافران | خیر | تعداد مسافران در سفر. |
| نقطه رهاسازی | خیر | مقصد سفر. |
| شناسه وسیله نقلیه | خیر | شماره شناسایی وسیله نقلیه اختصاص داده شده به سفر. |
مثال: یک سفر اشتراکی ایجاد کنید
نمونه یکپارچهسازی backend زیر نحوه ایجاد یک سفر و اختصاص آن به یک وسیله نقلیه به عنوان یک سفر shared-pooling را نشان میدهد.
// 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;
}
بهروزرسانی سفرهای اشتراکی اشتراکی
هر سفری که در Fleet Engine ایجاد میشود، باید به یک وسیله نقلیه اختصاص داده شود تا Fleet Engine بتواند ETA سفر را محاسبه و آن را ردیابی کند. میتوانید این کار را یا در حین ایجاد سفر یا بعداً هنگام بهروزرسانی سفر انجام دهید.
برای سفرهای اشتراکی، باید ترتیبی را برای نقاط مسیر بازدید نشده در مجموعه نقاط مسیر وسیله نقلیه ( Trip.vehicle_waypoints ) مشخص کنید. Fleet Engine از این لیست برای بهروزرسانی خودکار نقاط مسیر سفر برای همه سفرهای موجود در shared-pool استفاده میکند.
برای مثال، دو سفر با استخر مشترک، سفر الف و سفر ب، را در نظر بگیرید:
- سفر A در مسیر رسیدن به محل پیاده شدن مسافران است.
- سپس سفر B به همان وسیله نقلیه اضافه میشود.
در یک UpdateTripRequest برای سفر B ، شما vehicleId را تنظیم میکنید و همچنین Trip.vehicle_waypoints به ترتیب بهینهی نقطهی مسیر تنظیم میکنید: B Pickup → A Drop-off → B Drop-off .
- فراخوانی
getVehicle()remainingWaypointsرا برمیگرداند که شامل موارد زیر هستند:
برداشت B → تحویل A → تحویل B - چه تابع
getTrip() و چه تابعonTripRemainingWaypointsUpdatedبرای سفر A،remainingWaypointsبرمیگردانند که شامل موارد زیر باشند:
ب- سوار شدن → الف- پیاده شدن . - چه تابع
getTrip() و چه تابعonTripRemainingWaypointsUpdatedبرای سفر B،remainingWaypointsبرمیگردانند که شامل موارد زیر باشند:
برداشت B → تحویل A → تحویل B
مثال
نمونه یکپارچهسازی بکاند زیر نحوه بهروزرسانی یک سفر با شناسه وسیله نقلیه و نقاط مسیر برای دو سفر اشتراکی را نشان میدهد.
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;
}