접근 방식
Fleet Engine에서 최상의 성능을 얻으려면 차량 위치 업데이트 스트림을 분당 1회 이상, 5초마다 1회 이하로 제공하세요. 다음 방법 중 하나를 사용하여 업데이트를 제공하세요.
- Driver SDK 사용: 가장 간단한 옵션입니다.
- 맞춤 코드 사용: 위치가 백엔드를 통해 전달되거나 Android 또는 iOS 이외의 기기를 사용하는 경우에 유용합니다. 이 문서에서는 이 접근 방식을 다룹니다.
차량 위치 업데이트를 제공하는 방법과 관계없이 배송 차량이 정류장으로 이동 중일 때와 정류장에 도착할 때 백엔드에서 Fleet Engine을 업데이트해야 합니다. 여기에는 저장소 자체도 포함됩니다. Fleet Engine은 이러한 이벤트를 자동으로 감지하지 않습니다.
차량 위치 업데이트 예시
Java gRPC 라이브러리를 사용하여 Fleet Engine에서 차량의 위치를 업데이트하거나 REST를 사용할 수 있습니다.
자바
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