Bu belgede, çok varış noktalı bir gezi oluşturma, doğru alanları ayarlama ve bunu karşılanacak bir araca atama işlemleri açıklanmaktadır. Fleet Engine'i kurduğunuz, araç oluşturduğunuz, çalışan bir sürücü uygulamanızın ve isteğe bağlı olarak bir tüketici uygulamanızın olduğu varsayılır. Ayrıca, isteğe bağlı geziler için kullanılabilen çeşitli gezi senaryolarına da aşina olmanız gerekir. Bu konuda aşağıdaki ilgili kılavuzlara göz atın:
- Fleet Engine'i kurma
- Araç oluşturma
- Talep üzerine yolculuklar genel bakışında seyahat senaryoları
Gezi oluşturmayla ilgili temel bilgiler
Bu bölümde, Fleet Engine'de seyahat oluşturmak için gereken istek ayrıntıları açıklanmaktadır. gRPC ve REST'i kullanarak oluşturma isteği gönderirsiniz.
Seyahat Alanları
Fleet Engine'de gezi oluşturmak için aşağıdaki alanları kullanın. Farklı seyahat türleri (tek veya çok varış noktalı, arka arkaya ya da paylaşımlı yolculuklar) için farklı alanlar kullanabilirsiniz. İsteğe bağlı alanları geziyi oluştururken sağlayabilir veya geziyi güncellerken daha sonra ayarlayabilirsiniz.
Ad | Zorunlu mu? | Açıklama |
---|---|---|
üst | Evet | Proje kimliğini içeren bir dize. Bu kimlik, aynı hizmet hesabı rolleriyle birlikte tüm Fleet Engine entegrasyonunuzda kullanılan kimlikle aynı olmalıdır. |
trip_id | Evet | Bu geziyi benzersiz bir şekilde tanımlayan bir dize oluşturursunuz. Seyahat 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 çok varış noktalı yolculuklar: Sürücünün yolcu 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 | Gezide kullanılan aracın kimliği. |
Örnek: Çok varış noktalı gezi oluşturma
Aşağıda, bir teslim alma noktası, bir bırakma noktası ve bir ara hedef içeren özel bir çoklu hedef 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";
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
Filo Motoru'nun aracı rotası boyunca takip edebilmesi için geziyi bir araç kimliğiyle yapılandırmanız gerekir. Seyahatleri güncelleme hakkında ayrıntılı bilgi için Seyahatleri güncelleme ve durumlarını yönetme başlıklı makaleyi inceleyin.
Gezinizi oluştururken bırakma noktası veya ara hedefler belirtmediyseniz bunları her zaman bu noktada 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;
}
Çok varış noktalı seyahatlerde seyahat durumunu yönetme
TripStatus
numaralandırma değerlerinden birini kullanarak bir seyahatin durumunu belirtirsiniz. Bir seyahatin durumu değiştiğinde (ör. ENROUTE_TO_PICKUP
durumundan ARRIVED_AT_PICKUP
durumuna geçtiğinde) Fleet Engine'deki seyahat durumunu güncellemeniz gerekir. Gezinin durumu her zaman NEW
değeriyle başlar ve COMPLETE
veya CANCELED
değeriyle biter.
Ç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:
intermediateDestinationIndex
intermediateDestinationsVersion
Bunu yapmak için TripStatus
numaralandırmasındaki 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
Ara hedefleri olan örnek gezi
Aşağıda, teslim alma noktasını geçmiş ve şu anda ilk ara hedefine doğru yolda olan çok varış noktalı bir seyahatin 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;
}