Yakındaki sürücüleri bulma

İsteğe Bağlı Yolculuk ve Teslimat Çözümünüzün bir parçası olan Rota Planlama ve Sevkiyat özelliği, bir SearchVehicles API'si sağlayarak yakındaki sürücüleri bulmanıza olanak tanır.

SearchVehicles API, İsteğe Bağlı Yolculuk ve Teslimat Çözümü tüketici uygulamanızda yolculuk veya teslimat isteği gibi bir göreve en uygun olan yakındaki sürücüleri bulmanızı sağlar. SearchVehicles API, filonuzdaki araçların özellikleriyle görev özelliklerini eşleştiren sürücülerin sıralı listesini döndürür.

Görev özellikleri şunları içerebilir:

  • Teslim alma ve bırakma konumları
  • İstenen araç ve gezi türleri
  • Gereken kapasite
  • Eşleşen diğer gerekli özellikler

Araç özellikleri şunları içerebilir:

  • Bir aracın bilinen son konumu
  • Aracın durumu, türü veya kapasitesi
  • Diğer özel özellikler

Sıralama TVS, mesafe veya teslim alma noktasına kadar olan düz çizgi uzaklığı seçiminize göre sıralanır.

SearchVehicles API'yi kullanmak için Fleet Engine Hizmeti Süper Kullanıcısı veya Tüketici SDK Kullanıcısı ayrıcalıklarına sahip olmanız gerektiğini unutmayın. Daha fazla bilgi için Kimlik Doğrulama ve Yetkilendirme bölümüne bakın.

SearchVehicles API'yi kullanma

SearchVehicles API'yi kullanmak için:

  • Atanacak göreve göre bir SearchVehiclesRequest oluşturun.
  • Oluşturulan istekle birlikte SearchVehicles API'yi (vehicleService.searchVehicles) çağırın.
  • API'nin döndürdüğü SearchVehicleResponse öğesini işleyin.

SearchToolsRequest alanları

SearchVehiclesRequest oluşturmak için aşağıdaki zorunlu özellik alanlarını kullanın:

Alan Açıklama
parent Zorunludur. Sağlayıcı/{provider} biçiminde olmalıdır. Sağlayıcı, bu çağrıyı yapan hizmet hesabının üyesi olduğu Google Cloud Projesi'nin Proje Kimliği (örneğin, sample-cloud-project) olmalıdır.
vehicle_types Zorunludur. Talep edilen araç türleri: OTO, İKİ_WHEELER, TAKSİ, KAMYON, BİSİKLET veya YAYA.
trip_types Zorunludur. DIŞLAYICI (sürücü başına her seferinde bir aktif seyahat) veya PAYLAŞILDI (sürücü başına tek seferde bir veya daha fazla seyahat).
minimum_capacity Zorunludur. Yolcular veya teslimatlar için aracın yeni bir görev için kalan minimum kapasitesi.
pickup_point Zorunludur. Enlem/boylam koordinatlarında görevin alınma konumu.
dropoff_point İsteğe bağlı. Enlem/boylam koordinatlarında görevin bırakma konumu. trip_types, TripType.SHARED öğesini içeriyorsa bu alan gereklidir.
pickup_radius_meters Zorunludur. Teslim alma noktasından araç arama alanının metre cinsinden yarıçapı.
order_by Zorunludur. Araçları aşağıdaki seçeneklerden birine göre sıralayın:
  • PICKUP_POINT_ETA, aracın başlangıç noktasındaki TVS'si.
  • PICKUP_POINT_DISTANCE, araç ile başlangıç noktası arasındaki mesafe.
  • DROPOFF_POINT_ETA, bırakma noktasında yolculuğu tamamlamak için aracın ETA'sı.
  • PICKUP_POINT_STRAIGHT_DISTANCE, araç ile başlangıç noktası arasındaki düz çizgi mesafesi (rota üzerinde değil).
adet Zorunludur. 1'den 50'ye kadar döndürülecek maksimum araç sayısı.

SearchVehicleRequestfields alanının tamamını görmek için Referans belgelerine bakın.

AramaAraçlarıİstek örnekleri

Bu bölümde, SearchVehiclesRequest oluşturmayla ilgili örnekler gösterilmektedir.

Örneğin, RestoranX restoranında ve dört araçta atanacak bir teslim alma göreviniz olduğunu varsayalım:

  • 1. Araç, RestaurantX'ten 3.500 m uzaklıkta.
  • RestaurantX'e 100 metre uzaklıkta bulunan ve A ve B konumlarında alma ve bırakma seçeneğiyle aktif bir seyahate sahip olan 2. Araç.
  • 3. Araç, RestaurantX'ten 200 m uzaklıkta ve çok uzakta bir bırakma yeri kalmış.
  • 4. Araç, RestaurantX'e 1.000 m uzaklıkta.

Aşağıdaki SearchVehiclesRequest, Araç 4'ü döndürür:

Pickup at RestaurantX, radius = 1200m, order by PICKUP_POINT_ETA

Aşağıdaki SearchVehiclesRequest, Araç 3 ve 4'ü döndürür:

Pickup at RestaurantX, radius = 1200m, order by PICKUP_POINT_ETA, is_back_to_back enabled

Aşağıdaki SearchVehiclesRequest, Araç 2, 3 ve 4'ü döndürür:

Pickup at RestaurantX, radius = 1200m, order by PICKUP_POINT_ETA, current_trips_present = ALL

SearchVehiclesResponse alanları

SearchVehiclesResponse, SearchVehiclesRequest içinde belirtilen order_by özelliğine göre sıralanan VehicleMatch varlık listesinden oluşur. Her VehicleMatch varlığı aşağıdaki alanlara sahiptir:

Alan Açıklama
araç tool_id ve Vehicle özellikleri dahil olmak üzere Vehicle nesnesi.
vehicle_pickup_eta Yeni görevin teslim alma konumundaki aracın TVS'si. Bu, sürücü tahmini varış süresidir.
vehicle_pickup_distance_meter Araç ile yeni görevin teslim alınacağı yer arasındaki mesafe (metre cinsinden).
vehicle_pickup_straight_line_distance_meter Araç ile yeni görevin teslim alınacağı konum arasındaki düz çizgi mesafesi (metre cinsinden).
vehicle_dropoff_eta Yeni görevin teslim alınacağı konumdaki araç TVS'sinin Zaman Damgası. TVS'nin, sürücü TVS'dir.
vehicle_trips_waypoints Araca atanmış etkin geziler için kalan ara noktaların (başlama ve bırakma noktaları dahil) listesi.
vehicle_match_type Aracın seyahat türü: EXCLUSIVE, BACK_TO_BACK, CARPOOL veya CARPOOL_BACK_TO_BACK.

SearchVehicles Örneği

Aşağıdaki örnekte SearchVehicles API'nin nasıl kullanılacağı gösterilmektedir:

static final String PROJECT_ID = "project-id";

VehicleServiceBlockingStub vehicleService =
    VehicleService.newBlockingStub(channel);

String parent = "providers/" + PROJECT_ID;
SearchVehiclesRequest searchVehiclesRequest = SearchVehiclesRequest.newBuilder()
    .setParent(parent)
    .setPickupPoint( // Grand Indonesia East Mall
        TerminalLocation.newBuilder().setPoint(
            LatLng.newBuilder().setLatitude(-6.195139).setLongitude(106.820826)))
    .setDropoffPoint( // Balai Sidang Jkt Convention Center
        TerminalLocation.newBuilder().setPoint(
            LatLng.newBuilder().setLatitude(-6.213796).setLongitude(106.807195)))
    .setPickupRadiusMeters(2000)
    .setCount(10)
    .setMinimumCapacity(2)
    .addTripTypes(TripType.EXCLUSIVE)
    .addVehicleTypes(VehicleType.newBuilder().setCategory(Category.AUTO).build())
    .setCurrentTripsPresent(CurrentTripsPresent.ANY)
    .setFilter("attributes.on_trip=\"false\"")
    .setOrderBy(VehicleMatchOrder.PICKUP_POINT_ETA)
    .build();


try {
  SearchVehiclesResponse searchVehiclesResponse =
      vehicleService.searchVehicles(searchVehiclesRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
    case NOT_FOUND:
      break;
    case PERMISSION_DENIED:
      break;
  }
  return;
}

List<VehicleMatch> vehicleMatches =
    searchVehicleResponse.getMatchesList();

// Each VehicleMatch contains a Vehicle entity and information about the
// distance and ETA to the pickup point and drop-off point.