Bu belgede, birden fazla varış noktası olan bir gezi oluşturma, doğru alanları ayarlama ve geziyi yerine getirmesi için bir araca atama işlemleri açıklanmaktadır. Fleet Engine'i ayarladığınız, araç oluşturduğunuz, çalışan bir sürücü uygulamanız olduğu ve isteğe bağlı olarak bir tüketici uygulamanız olduğu varsayılır. Ayrıca, isteğe bağlı yolculuklar için sunulan çeşitli yolculuk senaryolarına da aşina olmanız gerekir. Bunun için aşağıdaki ilgili kılavuzlara bakın:
- Fleet Engine'i ayarlama
- Araç oluşturma
- Talep üzerine geziler genel bakış sayfasındaki Gezi senaryoları
Gezi oluşturmayla ilgili temel bilgiler
Bu bölümde, Fleet Engine'de gezi oluşturmak için gereken istek ayrıntıları açıklanmaktadır. gRPC veya REST kullanarak oluşturma isteği gönderirsiniz.
Seyahat Alanları
Fleet Engine'de seyahat oluşturmak için aşağıdaki alanları kullanın. Tek veya birden fazla varış noktası olan, arka arkaya ya da paylaşımlı yolculuklar gibi farklı türlerdeki yolculuklar için farklı alanlar kullanabilirsiniz. Geziyi oluştururken isteğe bağlı alanları doldurabilir veya geziyi güncellerken daha sonra ayarlayabilirsiniz.
| Ad | Zorunlu mu? | Açıklama |
|---|---|---|
| parent | Evet | Proje kimliğini içeren bir dize. Bu kimlik, Fleet Engine entegrasyonunuzun tamamında aynı hizmet hesabı rolleriyle kullanılan kimlikle aynı olmalıdır. |
| trip_id | Evet | Bu geziyi benzersiz şekilde tanımlamak için oluşturduğunuz dize. Gezi kimlikleri, referansta belirtildiği gibi belirli kısıtlamalara tabidir. |
| trip_type | Evet | Oluşturduğunuz gezi türü için TripType'ı aşağıdaki değerlere ayarlayın:
|
| pickup_point | Evet | Gezinin başlangıç noktası. |
| Ara hedefler | Evet | Yalnızca birden fazla varış noktası olan geziler: Sürücünün teslim alma ve bırakma arasında ziyaret ettiği ara varış noktalarının listesi. |
| vehicle_waypoints | Evet | Yalnızca paylaşımlı havuz gezileri: Bu alan, birden fazla gezideki ara noktaların iç içe geçmesini destekler.
Atanan araç için kalan tüm ara noktaların yanı sıra bu seyahatin teslim alma ve bırakma ara noktalarını içerir. Bu alanı |
| number_of_passengers | Hayır | Gezideki yolcu sayısı. |
| dropoff_point | Hayır | Gezinin varış noktası. |
| vehicle_id | Hayır | Geziye atanan aracın kimliği. |
Örnek: Çok varış noktalı bir gezi oluşturma
Aşağıda, teslim alma noktası, bırakma noktası ve bir ara varış noktası olan özel bir çok noktalı yolculuğun nasıl oluşturulacağı gösterilmektedir.
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;
}
Çok varış noktalı bir geziyi güncelleme
Fleet Engine'in aracı rotası boyunca takip edebilmesi için geziyi bir araç kimliğiyle yapılandırmanız gerekir. Geziyi güncelleme hakkında ayrıntılı bilgi için Gezileri güncelleme ve durumlarını yönetme başlıklı makaleyi inceleyin.
Gezinizi oluştururken bırakma veya ara varış noktaları belirtmediyseniz bunları her zaman bu aşamada belirtebilirsiniz.
Örnek gezi güncellemesi
Aşağıdaki örnekte, bir geziyi güncelleyerek ara hedefler listesi ekleme ve araç kimliği ayarlama işlemi gösterilmektedir.
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;
}
Birden fazla varış noktası olan geziler için gezi durumunu yönetme
TripStatus numaralandırma değerlerinden birini kullanarak bir gezinin durumunu belirtirsiniz. Bir gezinin durumu değiştiğinde (ör. ENROUTE_TO_PICKUP'dan ARRIVED_AT_PICKUP'a) gezi durumunu Fleet Engine'de güncellemeniz gerekir. Seyahat durumu her zaman NEW değeriyle başlar ve COMPLETE veya CANCELED değeriyle sona erer.
Çok varış noktalı bir gezi için, gezi durumunu tek varış noktalı bir gezide olduğu gibi güncellemenin yanı sıra aracınız her ara varış noktasına ulaştığında aşağıdakileri de güncellemeniz gerekir:
intermediateDestinationIndexintermediateDestinationsVersion
Bunun için TripStatus listesindeki aşağıdaki değerleri kullanın.
ENROUTE_TO_PICKUPARRIVED_AT_PICKUPENROUTE_TO_INTERMEDIATE_DESTINATIONARRIVED_AT_INTERMEDIATE_DESTINATIONENROUTE_TO_DROPOFFCOMPLETE
Ara varış noktaları içeren örnek gezi
Aşağıda, teslim noktasını geçmiş ve ilk ara hedefine doğru ilerleyen çok hedefli bir gezinin nasıl oluşturulacağı gösterilmektedir.
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;
}