Teslimat aracı konumunu güncelleme

Araç istekleri başlığı altındaki koşulları okuyun.

Yaklaşımlar

Fleet Engine'in en iyi performansı göstermesi için her dakika en az bir kez ve en fazla 5 saniyede bir araç konumu güncellemeleri akışı sağlayın. Bu güncellemeleri sağlamak için aşağıdaki yöntemlerden birini kullanın:

  • Driver SDK'yı kullanın: En basit seçenektir.
  • Özel kod kullanma: Konumlar arka uçunuz üzerinden iletiliyorsa veya Android ya da iOS dışında cihazlar kullanıyorsanız bu seçenek kullanışlıdır. Bu dokümanda bu yaklaşım ele alınmaktadır.

Araç konumu güncellemelerini nasıl sağladığınızdan bağımsız olarak, bir teslimat aracı bir durağa giderken ve durağa vardığında Fleet Engine'i güncellemekten arka uçunuz sorumludur. Buna deponun kendisi de dahildir. Fleet Engine bu etkinlikleri otomatik olarak algılamaz.

Araç konumunu güncelleme örnekleri

Filo Motoru'nda bir aracın konumunu güncellemek için Java gRPC kitaplığını veya REST'i kullanabilirsiniz.

Java

  static final String PROJECT_ID = "my-delivery-co-gcp-project";
  static final String VEHICLE_ID = "vehicle-8241890";

  DeliveryServiceBlockingStub deliveryService =
    DeliveryServiceGrpc.newBlockingStub(channel);

  // Vehicle settings
  String vehicleName = "providers/" + PROJECT_ID + "/deliveryVehicles/" + VEHICLE_ID;
  DeliveryVehicle myDeliveryVehicle = DeliveryVehicle.newBuilder()
      .setLastLocation(DeliveryVehicleLocation.newBuilder()
          .setSupplementalLocation(LatLng.newBuilder()
              .setLatitude(37.3382)
              .setLongitude(121.8863))
          .setSupplementalLocationTime(now())
          .setSupplementalLocationSensor(DeliveryVehicleLocationSensor.CUSTOMER_SUPPLIED_LOCATION)
          .setSupplementalLocationAccuracy(DoubleValue.of(15.0)))  // Optional
      .build();

  // DeliveryVehicle request
  UpdateDeliveryVehicleRequest updateDeliveryVehicleRequest =
    UpdateDeliveryVehicleRequest.newBuilder()  // No need for the header
        .setName(vehicleName)
        .setDeliveryVehicle(myDeliveryVehicle)
        .setUpdateMask(FieldMask.newBuilder()
            .addPaths("last_location"))
        .build();

  try {
    DeliveryVehicle updatedDeliveryVehicle =
        deliveryService.updateDeliveryVehicle(updateDeliveryVehicleRequest);
  } catch (StatusRuntimeException e) {
    Status s = e.getStatus();
    switch (s.getCode()) {
       case NOT_FOUND:
         break;
       case PERMISSION_DENIED:
         break;
    }
    return;
  }

REST

PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/deliveryVehicles/<id>?updateMask=last_location

Talep ayıntıları

İstek gövdesi, alanları aşağıdaki gibi belirten bir DeliveryVehicle öğesi içermelidir:

  • Doldurulması zorunlu alanlar:

    AlanDeğer
    lastLocation.supplementalLocation Aracın konumu.
    lastLocation.supplementalLocationTime Aracın bu konumda bulunduğu bilinen son zaman damgası.
    lastLocation.supplementalLocationSensor CUSTOMER_SUPPLIED_LOCATION ile doldurulmalıdır.

  • İsteğe bağlı alanlar:

    AlanDeğer
    lastLocation.supplementalLocationAccuracy Sağlanan konumun doğruluğu (metre cinsinden).

  # Set JWT, PROJECT_ID, VEHICLE_ID, TASK1_ID, and TASK2_ID in the local
  # environment
  curl -X PATCH "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/deliveryVehicles/${VEHICLE_ID}?updateMask=remainingVehicleJourneySegments" \
    -H "Content-type: application/json" \
    -H "Authorization: Bearer ${JWT}" \
    --data-binary @- << EOM
  {
    "lastLocation": {
      "supplementalLocation": {"latitude": 12.1, "longitude": 14.5},
      "supplementalLocationTime": "$(date -u --iso-8601=seconds)",
      "supplementalLocationSensor": "CUSTOMER_SUPPLIED_LOCATION",
      "supplementalLocationAccuracy": 15
    }
  }
  EOM

Sırada ne var?