配達車両の場所を更新する

アプローチ

Fleet Engine で最適なパフォーマンスを得るには、少なくとも 1 分に 1 回、最大で 5 秒に 1 回、車両 の位置情報の更新ストリームを提供します。 これらの更新情報を提供するには、次のいずれかの方法を使用します。

  • **Driver SDK を使用する**: 最も簡単な方法です。
  • カスタムコードを使用する: 位置情報がバックエンド経由で中継される場合、 または Android または iOS 以外のデバイスを使用する場合に便利です。このドキュメントでは、その アプローチについて説明します。

車両の位置情報の更新方法に関係なく、配送車両が停車地に向かっているときや停車地に到着したときに Fleet Engine を更新するのは、バックエンドの 役割です。これにはデポ自体も含まれます。Fleet Engine は、これらのイベントを自動的に検出しません。

車両の位置情報の更新例

Fleet Engine で車両の位置情報を更新するには、次の例に示すように、 Java gRPC ライブラリまたは REST を使用します。サポートされている言語の 完全なリストについては、 スケジュールされたタスク サービスのクライアント ライブラリをご覧ください。

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

リクエストの詳細

リクエストの本文には、次のフィールドを指定する DeliveryVehicle エンティティを含める必要があります。

  • 必須フィールド:

    フィールド
    lastLocation.supplementalLocation 車両の位置。
    lastLocation.supplementalLocationTime 車両がこの場所にいたことがわかっている最後のタイムスタンプ。
    lastLocation.supplementalLocationSensor CUSTOMER_SUPPLIED_LOCATION を入力する必要があります。

  • 省略可能な項目:

    フィールド
    lastLocation.supplementalLocationAccuracy 指定された位置情報の精度(メートル単位)。

  # 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

次のステップ