Actualiza la ubicación de un vehículo

Para obtener el mejor rendimiento con Fleet Engine, proporciónale una transmisión de actualizaciones de ubicación del vehículo. Usa cualquiera de las siguientes formas para proporcionar estas actualizaciones:

  1. Usa el SDK del controlador: Es la opción más sencilla. Consulta la documentación del SDK del controlador para Android o iOS.
  2. 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 esta guía, se aborda ese enfoque.

Si no usas el SDK del controlador para actualizar la ubicación del vehículo, puedes hacer una llamada directa a Fleet Engine con la ubicación del vehículo. Para cualquier vehículo activo, Fleet Engine espera una actualización de ubicación al menos una vez por minuto y, como máximo, una vez cada 5 segundos. Estas actualizaciones solo requieren privilegios de Usuario del SDK del controlador de Fleet Engine.

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

Para actualizar la ubicación de un vehículo, 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 viajes a pedido.

Java

static final String PROJECT_ID = "project-id";
static final String VEHICLE_ID = "vid-8241890";

VehicleServiceBlockingStub vehicleService = VehicleService.newBlockingStub(channel);

String vehicleName = "providers/" + PROJECT_ID + "/vehicles/" + VEHICLE_ID;
Vehicle updatedVehicle = Vehicle.newBuilder()
    .setLastLocation(VehicleLocation.newBuilder()
        .setSupplementalLocation(LatLng.newBuilder()
            .setLatitude(37.3382)
            .setLongitude(121.8863))
        .setSupplementalLocationTime(now())
        .setSupplementalLocationSensor(LocationSensor.CUSTOMER_SUPPLIED_LOCATION)
        .setSupplementalLocationAccuracy(DoubleValue.of(15.0)))  // Optional
    .build();

UpdateVehicleRequest updateVehicleRequest = UpdateVehicleRequest.newBuilder()
    .setName(vehicleName)
    .setVehicle(updatedVehicle)
    .setUpdateMask(FieldMask.newBuilder()
        .addPaths("last_location"))
    .build();

try {
  Vehicle updatedVehicle =
      vehicleService.updateVehicle(updateVehicleRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
    case NOT_FOUND:
      // Most implementations will call CreateVehicle in this case
      break;
    case PERMISSION_DENIED:
      break;
  }
  return;
}
// If no Exception, Vehicle updated successfully.

REST

curl -X PUT \
  "https://fleetengine.googleapis.com/v1/providers/project-id/vehicles/vid-8241890?updateMask=last_location" \
  -H "Authorization: Bearer $JWT" \
  -H "Content-Type: application/json" \
  --data-binary @- << EOM
{
    "supplementalLocation": {"latitude": 12.1, "longitude": 14.5},
    "supplementalLocationTime": "$(date -u --iso-8601=seconds)",
    "supplementalLocationSensor": "CUSTOMER_SUPPLIED_LOCATION",
    "supplementalLocationAccuracy": 15
}
EOM

Consulta la referencia de providers.vehicles.update.

¿Qué sigue?