تعديل الموقع الجغرافي لمركبة التسليم

الاقتراحات

للحصول على أفضل أداء باستخدام Fleet Engine، عليك تزويدها ببث من تعديلات الموقع الجغرافي للمركبة مرة واحدة على الأقل كل دقيقة وبحد أقصى مرة واحدة كل 5 ثوانٍ. يمكنك استخدام إحدى الطريقتَين التاليتَين لتقديم هذه التعديلات:

  • استخدام حزمة SDK لبرنامج التشغيل: أبسط خيار.
  • استخدام رمز مخصّص: يكون مفيدًا إذا كانت المواقع الجغرافية يتم نقلها من خلال الخلفية، أو إذا كنت تستخدم أجهزة غير Android أو iOS. يتناول هذا المستند هذا النهج.

بغض النظر عن الطريقة التي تقدّم بها آخر المعلومات عن الموقع الجغرافي للمركبة، يكون الجزء الخلفي من تطبيقك هو المسؤول عن تعديل Fleet Engine عندما تكون مركبة التسليم في الطريق إلى أحد المحطات وعند وصولها إلى المحطة. ويشمل ذلك المستودع نفسه. لا يرصد Fleet Engine هذه الأحداث تلقائيًا.

أمثلة على تعديل موقع المركبة

يمكنك استخدام مكتبة Java gRPC لتعديل الموقع الجغرافي للمركبة في Fleet Engine، أو استخدام 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

تفاصيل الطلب

يجب أن يحتوي نص الطلب على عنصر 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

الخطوات التالية