Bu dokümanda, çok hedefli bir seyahatin nasıl oluşturulacağı, doğru seyahat rotasının nasıl ayarlanacağı ve doldurulması için bir araca atayın. Filoyu kurduğunuz varsayılır Motor, araçlar oluşturdunuz, çalışan bir sürücü uygulamanız var ve isteğe bağlı olarak bir tüketici uygulaması. Ayrıca, farklı geziler hakkında bilgi sahibi isteğe bağlı seyahatler için birkaç senaryo mevcuttur. Aşağıdaki ilgili kılavuzları inceleyin:
- Fleet Engine'i kurma
- Araç oluşturma
- Seç-bin seyahatlerine genel bakış bölümündeki seyahat senaryoları
Gezi oluşturmayla ilgili temel bilgiler
Bu bölümde, Fleet Engine'da gezi oluşturmak için gerekli istek ayrıntıları açıklanmaktadır. gRPC veya REST kullanarak bir oluşturma isteği gönderirsiniz.
Seyahat Alanları
Fleet Engine'de gezi oluşturmak için aşağıdaki alanları kullanın. Farklı veri türleri için farklı seyahat türlerine yönelik alanlar sunar: tek veya çok hedefli, ortak havuz gezileri olabilir. Siz isteğe bağlı alanları geziyi oluştururken sağlayabilir veya bunları ya da siz de bu sırada gezinebilirsiniz.
Ad | Zorunlu mu? | Açıklama |
---|---|---|
parent | Evet | Proje kimliğini içeren bir dize. Bu kimlik, Fleet Engine entegrasyonunuzun tamamında kullanılan ve aynı hizmet hesabı rolleriyle aynı kimlik olmalıdır. |
trip_id | Evet | Sizin oluşturduğunuz ve bu seyahati benzersiz şekilde tanımlayan bir dize. Gezi kimlikleri referansta belirtildiği şekilde bazı kısıtlamalara tabi olacaktır. |
trip_type | Evet | Oluşturduğunuz seyahat türü için TripType parametresini aşağıdaki değerlere ayarlayın:
|
pickup_point | Evet | Yolculuğun kalkış noktası. |
Orta seviye hedefler | Evet | Yalnızca çok hedefli geziler: Sürücün arada ziyaret ettiği ara hedeflerin listesi
yardımcı olur. |
vehicle_waypoints | Evet | Yalnızca ortak havuz gezileri: Bu alan, birden fazla seyahatteki ara noktaların arasına katılmayı destekler.
Atanmış araç için kalan tüm yol noktalarının yanı sıra bu seyahatin teslim alma ve bırakma yol noktalarını içerir. Bu alanı,
|
number_of_passengers | Hayır | Seyahatteki yolcu sayısı. |
dropoff_point | Hayır | Gezinin varış noktası. |
vehicle_id | Hayır | Seyahate atanan aracın kimliği. |
Örnek: Birden fazla hedefi olan bir gezi oluşturma
Aşağıda, çok varışlı özel bir seyahatin nasıl oluşturulacağı gösterilmektedir ve bir ara varış noktası bulunan bir envanter ekleyebilirsiniz.
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;
}
Birden çok hedefi olan bir geziyi güncelleme
Fleet Engine'in takip edebilmesi için yolculuğu bir araç kimliğiyle yapılandırmanız gerekir. görebilirsiniz. Gezi güncellemeyle ilgili ayrıntılar için bkz. Gezileri güncelleyin ve durumlarını yönetin.
Siz yazarken bir ayrılma veya ara hedefler belirtmezseniz bu noktada her zaman kendiniz gezinebilirsiniz.
Örnek gezi güncellemesi
Aşağıda, bir geziyi ara düzeyler listesi eklemek için nasıl güncelleyeceğinizi gösterilmektedir varış noktaları belirleyin ve araç kimliği belirleyin.
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;
}
Çok hedefli seyahatler için seyahat durumunu yönetme
TripStatus
listeleme değerlerinden birini kullanarak bir seyahatin durumunu belirtirsiniz. Bir seyahatin durumu değiştiğinde (ör. ENROUTE_TO_PICKUP
iken)
ARRIVED_AT_PICKUP
, Fleet Engine'de seyahat durumunu güncellemeniz gerekiyor. Yolculuk
durum her zaman bir NEW
değeriyle başlar ve
COMPLETE
veya CANCELED
.
Birden fazla hedefi olan bir gezi için, gezi durumunu tek hedefli bir gezi için yaptığınız gibi güncellemenin yanı sıra aracınız her ara hedefe ulaştığında aşağıdakileri de güncellemeniz gerekir:
intermediateDestinationIndex
intermediateDestinationsVersion
Bunu yapmak için TripStatus
numaralandırmasında bulunan aşağıdaki değerleri kullanın.
ENROUTE_TO_PICKUP
ARRIVED_AT_PICKUP
ENROUTE_TO_INTERMEDIATE_DESTINATION
ARRIVED_AT_INTERMEDIATE_DESTINATION
ENROUTE_TO_DROPOFF
COMPLETE
Orta seviyeli varış noktaları içeren örnek gezi
Aşağıda, süresi geçen çok hedefli bir seyahatin nasıl oluşturulacağı gösterilmektedir ve şu anda ilk ara hedefine doğru yolda.
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;
}