배송 차량 위치 업데이트

접근 방식

Fleet Engine의 최상의 성능을 위해 차량 위치 업데이트 스트림을 최소 1분마다 한 번, 최대 5초마다 한 번 제공하세요. 다음 방법 중 하나를 사용하여 이러한 업데이트를 제공하세요.

  • Driver SDK 사용: 가장 간단한 옵션입니다.
  • 맞춤 코드 사용: 위치가 백엔드를 통해 전달되거나 Android 또는 iOS 이외의 기기를 사용하는 경우에 유용합니다. 이 문서에서는 이 접근 방식을 다룹니다.

차량 위치 업데이트를 제공하는 방식과 관계없이 배송 차량이 정류장으로 이동 중일 때와 정류장에 도착했을 때 Fleet Engine을 업데이트하는 것은 백엔드의 책임입니다. 여기에는 창고 자체가 포함됩니다. Fleet Engine에서는 이러한 이벤트를 자동으로 감지하지 않습니다.

차량 위치 업데이트 예시

Fleet Engine에서 차량의 위치를 업데이트하려면 다음 예와 같이 Java gRPC 라이브러리 또는 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

다음 단계