Actualiza la ubicación de un vehículo de entrega

Approaches

Para obtener el mejor rendimiento con Fleet Engine, proporciónale una transmisión de actualizaciones de ubicación del vehículo al menos una vez por minuto y, como máximo, una vez cada 5 segundos. Para proporcionar estas actualizaciones, usa cualquiera de las siguientes opciones:

  • Usa el SDK de Driver: Es la opción más sencilla.
  • Usa código personalizado: Es útil si las ubicaciones se retransmiten a través de tu backend, o si usas dispositivos que no son Android ni iOS. En este documento, se aborda ese enfoque.

Independientemente de cómo proporciones las actualizaciones de ubicación del vehículo, tu backend es responsable de actualizar Fleet Engine cuando un vehículo de entrega está en camino a una parada y cuando llega a una parada. Esto incluye el depósito en sí. Fleet Engine no detecta estos eventos automáticamente.

Ejemplos de actualización de la ubicación del vehículo

Para actualizar la ubicación de un vehículo en Fleet Engine, puedes usar la biblioteca gRPC de Java o REST, como se muestra en el siguiente ejemplo. Para obtener una lista completa de los idiomas compatibles, consulta Bibliotecas cliente para servicios de tareas programadas.

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

Detalles de la solicitud

El cuerpo de la solicitud debe contener una entidad DeliveryVehicle que especifique los campos de la siguiente manera:

  • Campos obligatorios:

    CampoValor
    lastLocation.supplementalLocation Es la ubicación del vehículo.
    lastLocation.supplementalLocationTime Es la marca de tiempo más reciente conocida en la que el vehículo estuvo en esta ubicación.
    lastLocation.supplementalLocationSensor Se debe propagar con CUSTOMER_SUPPLIED_LOCATION.

  • Campos opcionales:

    CampoValor
    lastLocation.supplementalLocationAccuracy Es la precisión de la ubicación proporcionada, en metros.

  # 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

¿Qué sigue?