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

Approaches

Para obtener el mejor rendimiento con Fleet Engine, proporciónalo con una transmisión de vehículos la ubicación se actualiza, al menos, una vez cada minuto y, como máximo, una vez cada 5 segundos. Usa cualquiera de las siguientes formas para proporcionar estas actualizaciones:

  • Usa el SDK del controlador: Es la opción más simple.
  • Usar código personalizado: Es útil si las ubicaciones se retransmiten a través de tu backend. o si usas dispositivos que no sean Android o iOS. En este documento, se abarca lo siguiente: enfoque.

Sin importar cómo proporciones actualizaciones de la ubicación del vehículo, tu backend responsable de actualizar Fleet Engine cuando un vehículo de reparto 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.

Actualizar ejemplos de ubicación de vehículos

Puedes usar la biblioteca de gRPC de Java para actualizar la ubicación de un vehículo en la flota Engine o usa 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

Detalles de la solicitud

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

  • Campos obligatorios:

    CampoValor
    lastLocation.supplementalLocation La ubicación del vehículo.
    lastLocation.supplementalLocationTime La última marca de tiempo conocida en la que el vehículo estuvo en esta ubicación.
    lastLocation.supplementalLocationSensor Debe propagarse con CUSTOMER_SUPPLIED_LOCATION.

  • Campos opcionales:

    CampoValor
    lastLocation.supplementalLocationAccuracy 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?