Birden çok varış noktası içeren geziler oluşturun

Bu dokümanda, çok hedefli bir seyahatin nasıl oluşturulacağı ve doğru URL'nin 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ğıdakiler için aşağıdaki ilgili kılavuzlara bakın: şu bilgileri sağlar:

Gezi oluşturmayla ilgili temel bilgiler

Bu bölümde, Londra'da seyahat oluşturmak için gereken istek ayrıntıları Filo Motoru. gRPC veya REST kullanarak bir oluşturma isteği gönderirsiniz.

  • CreateTrip() yöntemi: gRPC veya REST
  • CreateTripRequest mesajı: Yalnızca gRPC

Gezi 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.

Seyahat alanları
Ad Zorunlu mu? Açıklama
parent Evet Proje kimliğini içeren bir dize. Bu kimlik, kullanılan kimlikle aynı olmalıdır aynı hizmet hesabını kullanarak, Fleet Engine entegrasyonunuzun tamamında rolleriyle birlikte çalışı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 TripType'ı, oluşturduğunuz gezi türü için aşağıdaki değerlere ayarlayın:
  • Tek hedef: SHARED veya EXCLUSIVE olarak ayarlayın.
  • Çok hedef: EXCLUSIVE olarak ayarlayın.
  • Back-to-back: EXCLUSIVE değerine ayarlanır.
  • Shared Pooling (Paylaşılan havuz): SHARED olarak 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. dropoff_point olduğu gibi bu alan da daha sonra da ayarlanabilir ancak çok hedefli bir arama yapıldığında UpdateTrip tanımı gereği ara hedefler içerir.

vehicle_waypoints Evet

Yalnızca ortak havuz gezileri: Bu alan, birden fazla seyahatteki ara noktaların arasına katılmayı destekler. Burada, atanan aracın kalan tüm ara noktaları da olarak ayarlayabilirsiniz. Bu alanı, CreateTrip veya UpdateTrip numaralı telefonu arayarak. Ayrıca transkriptinizi waypoints alanındaki araç ara noktalarını bir UpdateVehicle numaralı telefona sesli arama yapın. Hizmet GetTrip aramalarında bu bilgileri döndürmez izin verilebilir.

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: çok hedefli bir gezi oluşturma

Aşağıda, çok hedefli ö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;
}

Çok hedefli seyahati güncelleme

Fleet Engine'in takip edebilmesi için yolculuğu bir araç kimliğiyle yapılandırmanız gerekir. görebilirsiniz. Bir geziyi güncellemeyle ilgili ayrıntılar için bkz. Gezileri güncelleyin ve durumlarını yönetin.

Belirli bir hedeften ayrıldığınızda veya ara hedefler belirlemezseniz, 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

Bir gezinin durumunu TripStatus numaralandırmasından birini kullanarak belirtirsiniz değerler. 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.

Çok hedefli bir seyahat için, seyahat durumunu güncellemenin yanı sıra, olursa, aşağıdakileri de güncellemeniz gerekir: Aracınız ara hedefe her ulaştığında:

  • 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;
}

Sırada ne var?