アプローチ
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.supplementalLocationSensorCUSTOMER_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