배송 차량 위치 업데이트

접근 방식

Fleet Engine으로 최고의 성능을 얻으려면 차량 스트림을 제공하세요. 위치가 최소 1분마다 한 번, 최대 5초마다 한 번씩 업데이트됩니다. 다음 방법 중 하나를 사용하여 업데이트를 제공하세요.

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

차량 위치 업데이트를 제공하는 방법과 관계없이 배송 차량이 정류장으로 이동 중일 때와 정류장에 도착할 때 백엔드에서 Fleet Engine을 업데이트해야 합니다. 여기에는 저장소 자체도 포함됩니다. Fleet 엔진 이러한 이벤트를 자동으로 감지하지 않습니다.

차량 위치 예시 업데이트

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

다음 단계