JavaScript फ़्लीट ट्रैकिंग लाइब्रेरी की मदद से अपने डिवाइसों को ट्रैक करें

JavaScript फ़्लीट ट्रैकिंग लाइब्रेरी की मदद से, करीब-करीब रीयल-टाइम में वाहनों की उनके फ़्लीट में मौजूद जगह की जानकारी को विज़ुअलाइज़ किया जा सकता है. लाइब्रेरी, डिलीवरी वाहनों को दिखाने और टास्क को विज़ुअलाइज़ करने के लिए, डिलीवरी एपीआई का इस्तेमाल करती है. JavaScript शिपमेंट ट्रैकिंग लाइब्रेरी की तरह ही, इसमें JavaScript मैप कॉम्पोनेंट होता है. यह स्टैंडर्ड google.maps.Map इकाई और डेटा कॉम्पोनेंट को फ़्लीट इंजन से कनेक्ट करने के लिए, ड्रॉप-इन रीप्लेसमेंट है.

घटक

JavaScript फ़्लीट ट्रैकिंग लाइब्रेरी, डिलीवरी की सुविधा देने वाले वाहनों और स्टॉप के विज़ुअलाइज़ेशन के लिए कॉम्पोनेंट उपलब्ध कराती है. साथ ही, ईटीए या डिलीवरी की बची हुई दूरी के लिए रॉ डेटा फ़ीड भी मुहैया कराती है.

फ़्लीट ट्रैकिंग मैप व्यू

फ़्लीट ट्रैकिंग मैप व्यू कॉम्पोनेंट, गाड़ियों और टास्क की जगह की जानकारी दिखाता है. अगर किसी वाहन का रास्ता जाना जा चुका है, तो मैप व्यू कॉम्पोनेंट उस वाहन को अपने अनुमानित रास्ते पर चलने के साथ-साथ ऐनिमेट करता है.

फ़्लीट ट्रैकिंग के मैप व्यू का उदाहरण

जगह की जानकारी देने वाली कंपनियां

जगह की जानकारी देने वाली सुविधा, Fleet Engine में सेव की गई जानकारी के साथ काम करती है, ताकि ट्रैक किए गए ऑब्जेक्ट की जगह की जानकारी, जर्नी शेयरिंग मैप में भेजी जा सके.

वाहन की डिलीवरी की जगह की जानकारी देने वाली कंपनी

डिलीवरी करने वाले वाहन की जगह की जानकारी देने वाली कंपनी, एक डिलीवरी वाले वाहन की जगह की जानकारी दिखाती है. इसमें वाहन की जगह के साथ-साथ उन टास्क की जानकारी भी दी गई है जिन्हें डिलीवरी वाहन ने पूरा किया था.

डिलीवरी फ़्लीट की जगह की जानकारी देने वाली कंपनी

डिलीवरी की सुविधा देने वाली कंपनी, कई वाहनों की जगह की जानकारी दिखाती है. आपके पास चुनिंदा गाड़ियों या जगहों को फ़िल्टर करने या पूरे वाहन को देखने का विकल्प होता है.

ट्रैक की गई जगहों की जानकारी कंट्रोल करना

इस सेक्शन में बताया गया है कि फ़्लीट इंजन की पहले से तय जगह की जानकारी देने वाले के लिए, मैप पर ट्रैक की गई जगह की जानकारी देने वाले ऑब्जेक्ट के लिए, 'किसको दिखे' नियम क्या हैं. कस्टम या डिराइव्ड जगह की जानकारी देने वाली कंपनियां, 'किसको दिखे' सेटिंग में बदलाव कर सकती हैं.

डिलीवरी गाड़ियां

Fleet Engine में, डिलीवरी करने वाले वाहन को जैसे ही बनाया जाता है, वह दिखने लगता है. साथ ही, वह पूरे रास्ते में दिखता है, फिर चाहे उसका काम कुछ भी हो.

टास्क की जगह के मार्कर

मैप पर वाहन के स्टॉप मार्कर के तौर पर दिखाए गए हैं. पूरे हो चुके टास्क के मार्कर, किसी वाहन के पहले से तय स्टॉप की तुलना में अलग स्टाइल में दिखाए जाते हैं.

टास्क के नतीजे दिखाने की जगह, टास्क के नतीजों के मार्कर के साथ दिखती है. REQUIRED नतीजे वाले टास्क, सफल टास्क मार्कर के साथ दिखते हैं. वहीं, बाकी सभी टास्क, पूरे न हो पाने वाले टास्क मार्कर के साथ दिखते हैं.

JavaScript Fleet ट्रैकिंग लाइब्रेरी का इस्तेमाल शुरू करना

JavaScript Fleet Tracking Library का इस्तेमाल करने से पहले, पक्का कर लें कि आपने Fleet Engine के बारे में अच्छी तरह से जान लिया है और एपीआई पासकोड पाने के बारे में भी जान लिया है. इसके बाद, टास्क आईडी और डिलीवरी वाहन के आईडी का दावा करें.

टास्क आईडी और डिलीवरी वाहन के आईडी का दावा करें

डिलीवरी वाहन की जगह की जानकारी देने वाली कंपनी की मदद से डिलीवरी वाहनों को ट्रैक करने के लिए, टास्क आईडी और डिलीवरी वाहन के आईडी के साथ JSON वेब टोकन (JWT) बनाएं.

JWT पेलोड बनाने के लिए, taskid और deliveryvehicleid कुंजियों के साथ ऑथराइज़ेशन सेक्शन में अतिरिक्त दावा जोड़ें और हर कुंजी की वैल्यू को * पर सेट करें. टोकन, Fleet Engine सेवा सुपर उपयोगकर्ता क्लाउड IAM भूमिका का इस्तेमाल करके बनाया जाना चाहिए. ध्यान दें कि इससे, फ़्लीट इंजन की इकाइयां बनाने, पढ़ने, और उनमें बदलाव करने का काफ़ी ऐक्सेस मिलता है. साथ ही, इसे सिर्फ़ भरोसेमंद उपयोगकर्ताओं के साथ ही शेयर किया जाना चाहिए.

यहां दिए गए उदाहरण में बताया गया है कि वाहन और टास्क के हिसाब से, ट्रैकिंग के लिए टोकन कैसे बनाया जाता है:

{
  "alg": "RS256",
  "typ": "JWT",
  "kid": "private_key_id_of_consumer_service_account"
}
.
{
  "iss": "superuser@yourgcpproject.iam.gserviceaccount.com",
  "sub": "superuser@yourgcpproject.iam.gserviceaccount.com",
  "aud": "https://fleetengine.googleapis.com/",
  "iat": 1511900000,
  "exp": 1511903600,
  "scope": "https://www.googleapis.com/auth/xapi",
  "authorization": {
     "taskid": "*",
     "deliveryvehicleid": "*",
   }
}

पुष्टि करने वाला टोकन फ़ेचर बनाएं

आपके पास पुष्टि करने वाला टोकन फ़ेचर बनाने का विकल्प होता है. इससे, अपने सर्वर पर सही दावों वाला टोकन हासिल किया जा सकता है. इसके लिए, आपको अपने प्रोजेक्ट के सेवा खाते के सर्टिफ़िकेट का इस्तेमाल करना होगा. यह ज़रूरी है कि आप सिर्फ़ अपने सर्वर पर टोकन मिंट करें और आपके सर्टिफ़िकेट किसी भी क्लाइंट के साथ शेयर न करें. ऐसा न करने पर, आपके सिस्टम की सुरक्षा को खतरा हो सकता है.

फ़ेचर को प्रॉमिस में रैप किए गए दो फ़ील्ड के साथ डेटा स्ट्रक्चर दिखाना होगा:

  • स्ट्रिंग token.
  • नंबर expiresInSeconds. फ़ेच करने के बाद इतने समय में टोकन खत्म हो जाता है.

इनमें से किसी भी बात के सही होने पर, JavaScript Fleet ट्रैकिंग लाइब्रेरी, ऑथेंटिकेशन टोकन फ़ेचर की मदद से टोकन का अनुरोध करती है:

  • इसमें मान्य टोकन नहीं होता है, जैसे कि जब इसने हाल ही के पेज लोड पर फ़ेचर को कॉल नहीं किया है या जब फ़ेचर कोई टोकन नहीं देता है.
  • इसे पहले फ़ेच किए गए टोकन की समयसीमा खत्म हो गई है.
  • इससे पहले जो टोकन फ़ेच किया गया था उसकी समयसीमा खत्म होने के एक मिनट के अंदर का समय है.

नहीं तो, लाइब्रेरी पिछले जारी किए गए, अब भी मान्य टोकन का इस्तेमाल करती है और फ़ेचर को कॉल नहीं करती है.

इस उदाहरण में, पुष्टि करने वाला टोकन फ़ेचर बनाने का तरीका बताया गया है:

JavaScript

function authTokenFetcher(options) {
  // options is a record containing two keys called 
  // serviceType and context. The developer should
  // generate the correct SERVER_TOKEN_URL and request
  // based on the values of these fields.
  const response = await fetch(SERVER_TOKEN_URL);
  if (!response.ok) {
    throw new Error(response.statusText);
  }
  const data = await response.json();
  return {
    token: data.Token,
    expiresInSeconds: data.ExpiresInSeconds
  };
}

TypeScript

function authTokenFetcher(options: {
  serviceType: google.maps.journeySharing.FleetEngineServiceType,
  context: google.maps.journeySharing.AuthTokenContext,
}): Promise<google.maps.journeySharing.AuthToken> {
  // The developer should generate the correct
  // SERVER_TOKEN_URL based on options.
  const response = await fetch(SERVER_TOKEN_URL);
  if (!response.ok) {
    throw new Error(response.statusText);
  }
  const data = await response.json();
  return {
    token: data.token,
    expiresInSeconds: data.expiration_timestamp_ms - Date.now(),
  };
}

टोकन इकट्ठा करने के लिए सर्वर-साइड एंडपॉइंट लागू करते समय, इन बातों को ध्यान में रखें:

  • यह ज़रूरी है कि एंडपॉइंट से, टोकन की समयसीमा खत्म होने का समय दिखाया जाए. ऊपर दिए गए उदाहरण में, यह data.ExpiresInSeconds के तौर पर दिखाया गया है.
  • पुष्टि करने वाले टोकन फ़ेचर को लाइब्रेरी में, डेटा फ़ेच करने की समयसीमा खत्म होने का समय (सेकंड में) पास करना होगा, जैसा कि उदाहरण में दिखाया गया है.
  • SERVER_TOKEN_URL, आपके बैकएंड को लागू करने के तरीके पर निर्भर करता है. ये सैंपल ऐप्लिकेशन बैकएंड के यूआरएल हैं:
    • https://SERVER_URL/token/delivery_driver/DELIVERY_VEHICLE_ID
    • https://SERVER_URL/token/delivery_consumer/TRACKING_ID
    • https://SERVER_URL/token/fleet_reader

एचटीएमएल से मैप लोड हो रहा है

यहां दिए गए उदाहरण में, किसी यूआरएल से JavaScript Journey शेयरिंग लाइब्रेरी को लोड करने का तरीका बताया गया है. एपीआई लोड होने के बाद, callback पैरामीटर initMap फ़ंक्शन एक्ज़ीक्यूट करता है. defer एट्रिब्यूट का इस्तेमाल करके, ब्राउज़र एपीआई के लोड होने के दौरान आपके बाकी पेज को रेंडर करना जारी रखता है.

<script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&callback=initMap&libraries=journeySharing" defer></script>

डिलीवरी वाहन को फ़ॉलो करें

इस सेक्शन में बताया गया है कि डिलीवरी वाले वाहन को फ़ॉलो करने के लिए, JavaScript फ़्लीट ट्रैकिंग लाइब्रेरी का इस्तेमाल कैसे किया जाता है. अपना कोड चलाने से पहले, स्क्रिप्ट टैग में दिए गए कॉलबैक फ़ंक्शन से लाइब्रेरी लोड कर लें.

वाहन की जगह की जानकारी देने वाली कंपनी को इंस्टैंशिएट करें

JavaScript Fleet Tracking Library में, Fleet Engine डिलीवरी API के लिए लोकेशन प्रोवाइडर की जानकारी दी जाती है. इसे इंस्टैंशिएट करने के लिए, अपने प्रोजेक्ट आईडी और टोकन फ़ैक्ट्री के रेफ़रंस का इस्तेमाल करें.

JavaScript

locationProvider =
    new google.maps.journeySharing
        .FleetEngineDeliveryVehicleLocationProvider({
          projectId,
          authTokenFetcher,

          // Optionally, you may specify 
          // deliveryVehicleId to immediately start
          // tracking.
          deliveryVehicleId: 'your-delivery-id',
});

TypeScript

locationProvider =
    new google.maps.journeySharing
        .FleetEngineDeliveryVehicleLocationProvider({
          projectId,
          authTokenFetcher,

          // Optionally, you may specify
          // deliveryVehicleId to immediately start
          // tracking.
          deliveryVehicleId: 'your-delivery-id',
});

मैप व्यू शुरू करना

JavaScript जर्नी शेयरिंग लाइब्रेरी लोड करने के बाद, मैप व्यू शुरू करें और उसे एचटीएमएल पेज में जोड़ें. आपके पेज में <div> एलिमेंट होना चाहिए, जिसमें मैप व्यू हो. नीचे दिए गए उदाहरण में, <div> एलिमेंट को map_canvas नाम दिया गया है.

JavaScript

const mapView = new 
    google.maps.journeySharing.JourneySharingMapView({
  element: document.getElementById('map_canvas'), 
  locationProviders: [locationProvider],
  // Styling customizations; see below.
  vehicleMarkerSetup: vehicleMarkerSetup,
  anticipatedRoutePolylineSetup:
      anticipatedRoutePolylineSetup,
  // Any undefined styling options will use defaults.
});

// If you did not specify a delivery vehicle ID in the 
// location provider constructor, you may do so here.
// Location tracking will start as soon as this is set.
locationProvider.deliveryVehicleId 
                        = 'your-delivery-vehicle-id';

// Give the map an initial viewport to allow it to 
// initialize; otherwise the 'ready' event above may 
// not fire. The user also has access to the mapView
// object to customize as they wish.
mapView.map.setCenter('Times Square, New York, NY');
mapView.map.setZoom(14);

TypeScript

const mapView = new 
    google.maps.journeySharing.JourneySharingMapView({
  element: document.getElementById('map_canvas'),
  locationProviders: [locationProvider],
  // Styling customizations; see below.
  vehicleMarkerSetup: vehicleMarkerSetup,
  anticipatedRoutePolylineSetup:
      anticipatedRoutePolylineSetup,
  // Any undefined styling options will use defaults.
});

// If you did not specify a delivery vehicle ID in the 
// location provider constructor, you may do so here.
// Location tracking will start as soon as this is set.
locationProvider.deliveryVehicleId 
                        = 'your-delivery-vehicle-id';

// Give the map an initial viewport to allow it to 
// initialize; otherwise the 'ready' event above may 
// not fire. The user also has access to the mapView 
// object to customize as they wish.
mapView.map.setCenter('Times Square, New York, NY');
mapView.map.setZoom(14);

बदलाव के इवेंट सुनना

जगह की जानकारी देने वाली कंपनी का इस्तेमाल करके, deliveryVehicle ऑब्जेक्ट से किसी टास्क की मेटा जानकारी पाई जा सकती है. मुख्य जानकारी में ETA और वाहन के अगले पिकअप या ड्रॉप-ऑफ़ से पहले की दूरी शामिल होती है. मेटा जानकारी में किए जाने वाले बदलावों से, अपडेट इवेंट ट्रिगर होता है. यहां दिए गए उदाहरण में, बदलाव से जुड़े इन इवेंट को सुनने का तरीका बताया गया है.

JavaScript

locationProvider.addListener('update', e => {
  // e.deliveryVehicle contains data that may be        
  // useful to the rest of the UI.  
  if (e.deliveryVehicle) {
    console.log(e.deliveryVehicle.remainingDuration);
  }
});

TypeScript

locationProvider.addListener('update',
    (e: google.maps.journeySharing.FleetEngineDeliveryVehicleLocationProviderUpdateEvent) => {
  // e.deliveryVehicle contains data that may be
  // useful to the rest of the UI.
  if (e.deliveryVehicle) {
    console.log(e.deliveryVehicle.remainingDuration);
  }
});

गड़बड़ियों का पता लगाना

वाहन की जानकारी डिलीवर करने का अनुरोध करने से एसिंक्रोनस तरीके से होने वाली गड़बड़ियां, गड़बड़ी के इवेंट को ट्रिगर करती हैं. नीचे दिए गए उदाहरण में, गड़बड़ियों को ठीक करने के लिए इन इवेंट को सुनने का तरीका बताया गया है.

JavaScript

locationProvider.addListener('error', e => {
  // e.error is the error that triggered the event.
  console.error(e.error);
});

TypeScript

locationProvider.addListener('error', (e: google.maps.ErrorEvent) => {
  // e.error is the error that triggered the event.
  console.error(e.error);
});

ट्रैकिंग रोकें

जगह की जानकारी देने वाले को डिलीवरी वाहन की ट्रैकिंग करने से रोकने के लिए, जगह की जानकारी देने वाली कंपनी से डिलीवरी वाहन का आईडी हटाएं.

JavaScript

locationProvider.deliveryVehicleId = '';

TypeScript

locationProvider.deliveryVehicleId = '';

मैप व्यू से, जगह की जानकारी देने वाली कंपनी को हटाएं

नीचे दिए गए उदाहरण में, मैप व्यू से जगह की जानकारी देने वाली कंपनी को हटाने का तरीका बताया गया है.

JavaScript

mapView.removeLocationProvider(locationProvider);

TypeScript

mapView.removeLocationProvider(locationProvider);

डिलीवरी की सुविधा देने वाले फ़्लीट देखना

इस सेक्शन में, डिलीवरी की सुविधा देने वाले डिवाइसों को देखने के लिए, JavaScript की गतिविधियों को शेयर करने की सुविधा इस्तेमाल करने का तरीका बताया गया है. अपना कोड चलाने से पहले, स्क्रिप्ट टैग में दिए गए कॉलबैक फ़ंक्शन से लाइब्रेरी लोड कर लें.

डिलीवरी फ़्लीट की जगह की जानकारी देने वाली कंपनी को इंस्टैंशिएट करें

JavaScript Fleet Tracking Library में, जगह की जानकारी देने वाली ऐसी कंपनी की जानकारी पहले से मौजूद होती है जो FleetEngine delivery API से कई वाहन फ़ेच करती है. इसे इंस्टैंशिएट करने के लिए, अपने प्रोजेक्ट आईडी और टोकन फ़ेचर के रेफ़रंस का इस्तेमाल करें.

JavaScript

locationProvider =
    new google.maps.journeySharing
        .FleetEngineDeliveryFleetLocationProvider({
          projectId,
          authTokenFetcher,

          // Optionally, specify location bounds to
          // limit which delivery vehicles are
          // retrieved and immediately start tracking.
          locationRestriction: {
            north: 37.3,
            east: -121.8,
            south: 37.1,
            west: -122,
          },
          // Optionally, specify a filter to limit
          // which delivery vehicles are retrieved.
          deliveryVehicleFilter:
            'attributes.foo = "bar" AND attributes.baz = "qux"',
        });

TypeScript

locationProvider =
    new google.maps.journeySharing
        .FleetEngineDeliveryFleetLocationProvider({
          projectId,
          authTokenFetcher,

          // Optionally, specify location bounds to
          // limit which delivery vehicles are
          // retrieved and immediately start tracking.
          locationRestriction: {
            north: 37.3,
            east: -121.8,
            south: 37.1,
            west: -122,
          },
          // Optionally, specify a filter to limit
          // which delivery vehicles are retrieved.
          deliveryVehicleFilter:
            'attributes.foo = "bar" AND attributes.baz = "qux"',
        });

deliveryVehicleFilter ऐसी क्वेरी के बारे में बताता है जिसका इस्तेमाल, मैप पर दिखने वाले वाहनों को फ़िल्टर करने के लिए किया जाता है. यह फ़िल्टर सीधे Fleet Engine को पास किया जाता है. काम करने वाले फ़ॉर्मैट के बारे में जानने के लिए, ListDeliveryVehiclesRequest.filter पर जाएं.

locationRestriction उस इलाके को सीमित करता है जहां मैप पर वाहन दिखाने हैं. इससे यह भी कंट्रोल होता है कि जगह की जानकारी ट्रैक करने की सुविधा चालू है या नहीं. जब तक इसे सेट नहीं किया जाता, तब तक स्थान ट्रैकिंग शुरू नहीं होगी.

जगह की जानकारी देने वाली कंपनी बनने के बाद, मैप व्यू शुरू करें.

मैप व्यूपोर्ट का इस्तेमाल करके स्थान प्रतिबंध सेट करें

locationRestriction की सीमाओं को मैप व्यू में दिख रहे इलाके से मैच करने के लिए कॉन्फ़िगर किया जा सकता है.

JavaScript

google.maps.event.addListenerOnce(
  mapView.map, 'bounds_changed', () => {
    const bounds = mapView.map.getBounds();
    if (bounds) {
      // If you did not specify a location restriction in the
      // location provider constructor, you may do so here.
      // Location tracking will start as soon as this is set.
      locationProvider.locationRestriction = bounds;
    }
  });

TypeScript

google.maps.event.addListenerOnce(
  mapView.map, 'bounds_changed', () => {
    const bounds = mapView.map.getBounds();
    if (bounds) {
      // If you did not specify a location restriction in the
      // location provider constructor, you may do so here.
      // Location tracking will start as soon as this is set.
      locationProvider.locationRestriction = bounds;
    }
  });

बदलाव के इवेंट सुनना

जगह की जानकारी देने वाली कंपनी का इस्तेमाल करके, deliveryVehicles ऑब्जेक्ट से फ़्लीट के बारे में मेटा जानकारी वापस पाई जा सकती है. मुख्य जानकारी में वाहन की प्रॉपर्टी शामिल होती हैं, जैसे कि नेविगेशन की स्थिति, बची हुई दूरी, और कस्टम एट्रिब्यूट. ज़्यादा जानकारी के लिए, रेफ़रंस दस्तावेज़ देखें. मेटा जानकारी में बदलाव करने पर, अपडेट इवेंट ट्रिगर होता है. नीचे दिए गए उदाहरण में, बदलाव से जुड़े इन इवेंट को सुनने का तरीका बताया गया है.

JavaScript

locationProvider.addListener('update', e => {
  // e.deliveryVehicles contains data that may be
  // useful to the rest of the UI.
  if (e.deliveryVehicles) {
    for (vehicle of e.deliveryVehicles) {
      console.log(vehicle.remainingDistanceMeters);
    }
  }
});

TypeScript

locationProvider.addListener('update',
    (e: google.maps.journeySharing.FleetEngineDeliveryFleetLocationProviderUpdateEvent) => {
  // e.deliveryVehicles contains data that may be
  // useful to the rest of the UI.
  if (e.deliveryVehicles) {
    for (vehicle of e.deliveryVehicles) {
      console.log(vehicle.remainingDistanceMeters);
    }
  }
});

गड़बड़ियों का पता लगाना

डिलीवरी फ़्लीट की जानकारी का अनुरोध करने से एसिंक्रोनस रूप से पैदा होने वाली गड़बड़ियां, गड़बड़ी वाले इवेंट को ट्रिगर करती हैं. इन इवेंट को सुनने का तरीका बताने वाले उदाहरणों के लिए, गड़बड़ियों का पता लगाने के लिए सुनें पेज पर जाएं.

ट्रैकिंग रोकें

जगह की जानकारी देने वाली कंपनी को डिलीवरी फ़्लीट को ट्रैक करने से रोकने के लिए, जगह की जानकारी देने वाली कंपनी की सीमाएं शून्य पर सेट करें.

JavaScript

locationProvider.locationRestriction = null;

TypeScript

locationProvider.locationRestriction = null;

मैप व्यू से, जगह की जानकारी देने वाली कंपनी को हटाएं

नीचे दिए गए उदाहरण में, मैप व्यू से जगह की जानकारी देने वाली कंपनी को हटाने का तरीका बताया गया है.

JavaScript

mapView.removeLocationProvider(locationProvider);

TypeScript

mapView.removeLocationProvider(locationProvider);

डिलीवरी फ़्लीट की जानकारी के साथ, डिलीवरी वाहन को ट्रैक करें

सभी गाड़ियों की जानकारी देखते समय, किसी खास वाहन के लिए रूट और आगे होने वाले टास्क दिखाए जा सकते हैं. ऐसा करने के लिए, डिलीवरी फ़्लीट जगह की जानकारी देने वाली कंपनी और डिलीवरी वाहन की जगह की जानकारी देने वाली कंपनी, दोनों को इंस्टैंशिएट करें और उन दोनों को मैप व्यू में जोड़ें:

JavaScript

deliveryFleetLocationProvider =
    new google.maps.journeySharing
        .FleetEngineDeliveryFleetLocationProvider({
          projectId,
          authTokenFetcher,

          // Optionally, specify location bounds to
          // limit which delivery vehicles are
          // retrieved and immediately start tracking.
          locationRestriction: {
            north: 37.3,
            east: -121.8,
            south: 37.1,
            west: -122,
          },
          // Optionally, specify a filter to limit
          // which delivery vehicles are retrieved.
          deliveryVehicleFilter:
            'attributes.foo = "bar" AND attributes.baz = "qux"',
        });

deliveryVehicleLocationProvider =
    new google.maps.journeySharing
        .FleetEngineDeliveryVehicleLocationProvider({
          projectId,
          authTokenFetcher
        });

const mapView = new
    google.maps.journeySharing.JourneySharingMapView({
  element: document.getElementById('map_canvas'),
  locationProviders: [
    deliveryFleetLocationProvider,
    deliveryVehicleLocationProvider,
  ],
  // Any other options
});

TypeScript

deliveryFleetLocationProvider =
    new google.maps.journeySharing
        .FleetEngineDeliveryFleetLocationProvider({
          projectId,
          authTokenFetcher,

          // Optionally, specify location bounds to
          // limit which delivery vehicles are
          // retrieved and immediately start tracking.
          locationRestriction: {
            north: 37.3,
            east: -121.8,
            south: 37.1,
            west: -122,
          },
          // Optionally, specify a filter to limit
          // which delivery vehicles are retrieved.
          deliveryVehicleFilter:
            'attributes.foo = "bar" AND attributes.baz = "qux"',
        });

deliveryVehicleLocationProvider =
    new google.maps.journeySharing
        .FleetEngineDeliveryVehicleLocationProvider({
          projectId,
          authTokenFetcher
        });

const mapView = new
    google.maps.journeySharing.JourneySharingMapView({
  element: document.getElementById('map_canvas'),
  locationProviders: [
    deliveryFleetLocationProvider,
    deliveryVehicleLocationProvider,
  ],
  // Any other options
});

डिलीवरी फ़्लीट की जगह की जानकारी देने वाली कंपनी, मैप पर डिलीवरी वाहनों को दिखाना शुरू कर देती है. डिलीवरी वाहन की जगह की जानकारी देने वाली सुविधा को चालू करने के लिए, मार्कर को पसंद के मुताबिक बनाने की सुविधा इस्तेमाल करें. इससे, वाहन के फ़्लीट मार्कर पर क्लिक होने पर, उसे ट्रैक करने की सुविधा मिलती है:

JavaScript

// Specify the customization function either separately, or as a field in
// the options for the delivery fleet location provider constructor.
deliveryFleetLocationProvider.deliveryVehicleMarkerCustomization =
  (params) => {
    if (params.isNew) {
      params.marker.addListener('click', () => {
        // params.vehicle.name follows the format
        // "providers/{provider}/deliveryVehicles/{vehicleId}".
        // Only the vehicleId portion is used for the delivery vehicle
        // location provider.
        deliveryVehicleLocationProvider.deliveryVehicleId =
            params.vehicle.name.split('/').pop();
      });
    }
  };

TypeScript

// Specify the customization function either separately, or as a field in
// the options for the delivery fleet location provider constructor.
deliveryFleetLocationProvider.deliveryVehicleMarkerCustomization =
  (params: google.maps.journeySharing.DeliveryVehicleMarkerCustomizationFunctionParams) => {
    if (params.isNew) {
      params.marker.addListener('click', () => {
        // params.vehicle.name follows the format
        // "providers/{provider}/deliveryVehicles/{vehicleId}".
        // Only the vehicleId portion is used for the delivery vehicle
        // location provider.
        deliveryVehicleLocationProvider.deliveryVehicleId =
            params.vehicle.name.split('/').pop();
      });
    }
  };

एक ही वाहन के लिए दो मार्कर रेंडर होने से रोकने के लिए, डिलीवरी वाहन की जगह की जानकारी देने वाले से मार्कर को छिपाएं:

JavaScript

// Specify the customization function either separately, or as a field in 
// the options for the delivery vehicle location provider constructor.
deliveryVehicleLocationProvider.deliveryVehicleMarkerCustomization =
  (params) => {
    if (params.isNew) {
      params.marker.setVisible(false);
    }
  };

TypeScript

// Specify the customization function either separately, or as a field in
// the options for the delivery vehicle location provider constructor.
deliveryVehicleLocationProvider.deliveryVehicleMarkerCustomization =
  (params: deliveryVehicleMarkerCustomizationFunctionParams) => {
    if (params.isNew) {
      params.marker.setVisible(false);
    }
  };

बुनियादी मैप के रंग-रूप को पसंद के मुताबिक बनाएं

मैप कॉम्पोनेंट के लुक को पसंद के मुताबिक बनाने के लिए, क्लाउड-आधारित टूल का इस्तेमाल करके या सीधे कोड में विकल्प सेट करके, अपने मैप की स्टाइल बदलें.

क्लाउड-आधारित मैप स्टाइल का इस्तेमाल करना

क्लाउड-आधारित मैप स्टाइल से, आपको Google Cloud कंसोल से Google Maps का इस्तेमाल करने वाले अपने सभी ऐप्लिकेशन के लिए, मैप स्टाइल बनाने और उनमें बदलाव करने की सुविधा मिलती है. इसके लिए, आपको कोड में बिना कोई बदलाव करने की ज़रूरत नहीं होती. मैप की स्टाइल, आपके Cloud प्रोजेक्ट में मैप आईडी के तौर पर सेव की जाती हैं. अपने JavaScript Fleet Tracking मैप पर स्टाइल लागू करने के लिए, JourneySharingMapView बनाते समय mapId डालें. JourneySharingMapView को इंस्टैंशिएट करने के बाद, mapId फ़ील्ड को बदला या जोड़ा नहीं जा सकता. नीचे दिए गए उदाहरण में, पहले बनाए गए मैप स्टाइल को मैप आईडी के साथ चालू करने का तरीका बताया गया है.

JavaScript

const mapView = new google.maps.journeySharing.JourneySharingMapView({
  element: document.getElementById('map_canvas'),
  locationProviders: [locationProvider],
  mapOptions: {
    mapId: 'YOUR_MAP_ID'
  }
});

TypeScript

const mapView = new google.maps.journeySharing.JourneySharingMapView({
  element: document.getElementById('map_canvas'),
  locationProviders: [locationProvider],
  mapOptions: {
    mapId: 'YOUR_MAP_ID'
  }
});

कोड पर आधारित मैप स्टाइलिंग का इस्तेमाल करना

मैप की स्टाइल को पसंद के मुताबिक बनाने का एक और तरीका है, JourneySharingMapView बनाते समय mapOptions को सेट करना.

JavaScript

const mapView = new google.maps.journeySharing.JourneySharingMapView({
  element: document.getElementById('map_canvas'),
  locationProviders: [locationProvider],
  mapOptions: {
    styles: [
      {
        "featureType": "road.arterial",
        "elementType": "geometry",
        "stylers": [
          { "color": "#CCFFFF" }
        ]
      }
    ]
  }
});

TypeScript

const mapView = new google.maps.journeySharing.JourneySharingMapView({
  element: document.getElementById('map_canvas'),
  locationProviders: [locationProvider],
  mapOptions: {
    styles: [
      {
        "featureType": "road.arterial",
        "elementType": "geometry",
        "stylers": [
          { "color": "#CCFFFF" }
        ]
      }
    ]
  }
});

रास्तों की स्टाइल और 'किसको दिखे' सेटिंग बदलना

लिए गए और अनुमानित रूट की स्टाइलिंग और 'किसको दिखे' सेटिंग कॉन्फ़िगर करने के लिए, पसंद के मुताबिक स्टाइल के विकल्पों का इस्तेमाल करें. ज़्यादा जानकारी के लिए, PolylineOptions इंटरफ़ेस देखें.

इस उदाहरण में, अनुमानित रूट की स्टाइल और 'किसको दिखे' सेटिंग को कॉन्फ़िगर करने का तरीका बताया गया है. लिए गए रास्तों की स्टाइल और 'किसको दिखे' सेटिंग कॉन्फ़िगर करने के लिए, anticipatedRoutePolylineSetup के बजाय takenRoutePolylineSetup का इस्तेमाल करें.

JavaScript

// This function is specified in the 
// JourneySharingMapView constructor's options 
// parameter.
function anticipatedRoutePolylineSetup({
    defaultPolylineOptions, defaultVisible}) {
  // If this function is not specified, the 
  // PolylineOptions object contained in 
  // defaultPolylineOptions is used to render the
  // anticipated route polyline. visible property sets the
  // polyline's visibility. Modify this object and 
  // pass it back to customize the style of the map.
  defaultPolylineOptions.strokeOpacity = 0.5;
  defaultPolylineOptions.strokeColor = 'red';
  return {
    polylineOptions: defaultPolylineOptions,
    visible: true
  };
}

// As an alternative, set static PolylineOptions to
// use for the anticipated route.
const anticipatedRoutePolylineOptionsSetup = {
  polylineOptions: {
    strokeOpacity: 0.5,
    strokeColor: 'red',
    …
  },
  visible: true,
};

TypeScript

// This function is specified in the 
// JourneySharingMapView constructor's options 
// parameter.
function anticipatedRoutePolylineSetup(options: {
  defaultPolylineOptions: google.maps.PolylineOptions,
  visible: boolean,
}): {
  polylineOptions: google.maps.PolylineOptions,
  visible: boolean,
} {
  // If this function is not specified, the 
  // PolylineOptions object contained in 
  // defaultPolylineOptions is used to render the
  // anticipated route polyline. visible property sets the
  // polyline's visibility. Modify this object and 
  // pass it back to customize the style of the map.
  options.defaultPolylineOptions.strokeOpacity = 0.5;
  options.defaultPolylineOptions.strokeColor = 'red';
  return {
    polylineOptions: options.defaultPolylineOptions,
    visible: true
  };
}

// As an alternative, set static PolylineOptions to
// use for the anticipated route.
const anticipatedRoutePolylineSetup = {
  polylineOptions: {
    strokeOpacity: 0.5,
    strokeColor: 'red',
    …
  },
  visible: true,
};

मार्कर कस्टमाइज़ेशन का इस्तेमाल करना

JavaScript फ़्लीट ट्रैकिंग लाइब्रेरी की मदद से, मैप में जोड़े गए मार्कर के लुक और स्टाइल को पसंद के मुताबिक बनाया जा सकता है. इसके लिए, आपको मार्कर कस्टमाइज़ेशन तय करना होगा. मैप पर मार्कर जोड़ने और हर मार्कर अपडेट के साथ यह फ़्लीट ट्रैकिंग लाइब्रेरी लागू होती है.

सबसे आसान तरीका है कि आप किसी MarkerOptions ऑब्जेक्ट के बारे में बताएं, जिसे एक ही तरह के सभी मार्कर पर लागू किया जाएगा. ऑब्जेक्ट में बताए गए बदलाव, हर मार्कर बनाने के बाद लागू होते हैं. साथ ही, ये बदलाव किसी भी डिफ़ॉल्ट विकल्प को ओवरराइट कर देते हैं.

कस्टम फ़ंक्शन के बारे में बताना ज़्यादा बेहतर विकल्प है. कस्टमाइज़ेशन फ़ंक्शन की मदद से, डेटा के आधार पर मार्कर की स्टाइल बनाई जा सकती है. साथ ही, क्लिक हैंडलिंग जैसे मार्कर में इंटरैक्टिविटी जोड़ी जा सकती है. खास तौर पर, फ़्लीट ट्रैकिंग की मदद से, आपकी पसंद के हिसाब से बनाए जा सकने वाले फ़ंक्शन में, मार्कर की मदद से दिखने वाले ऑब्जेक्ट के बारे में डेटा भेजा जाता है. जैसे, वाहन, स्टॉप या टास्क. इससे मार्कर की स्टाइलिंग को मार्कर एलिमेंट की मौजूदा स्थिति के आधार पर बदलने की अनुमति मिलती है. उदाहरण के लिए, बचे हुए स्टॉप की संख्या या अलग-अलग तरह के टास्क. आप Fleet Engine से बाहर के सोर्स के डेटा से भी जुड़ सकते हैं और उस जानकारी के आधार पर मार्कर को स्टाइल कर सकते हैं.

इसके अलावा, मार्कर विज़िबिलिटी को फ़िल्टर करने के लिए, कस्टमाइज़ेशन फ़ंक्शन का इस्तेमाल किया जा सकता है. ऐसा करने के लिए, मार्कर पर setVisible(false) को कॉल करें.

हालांकि, हमारा सुझाव है कि परफ़ॉर्मेंस की वजह से, जगह की जानकारी देने वाली कंपनी में नेटिव फ़िल्टर के साथ फ़िल्टर करें, जैसे कि FleetEngineDeliveryFleetLocationProvider.deliveryVehicleFilter. हालांकि, फ़िल्टर करने की अतिरिक्त सुविधा की ज़रूरत पड़ने पर, कस्टमाइज़ेशन फ़ंक्शन का इस्तेमाल करके फ़िल्टर लागू किया जा सकता है.

फ़्लीट ट्रैकिंग लाइब्रेरी में ये पसंद के मुताबिक पैरामीटर दिए गए हैं:

MarkerOptions का उपयोग करके मार्कर की शैली बदलें

नीचे दिए गए उदाहरण में, MarkerOptions ऑब्जेक्ट के साथ वाहन के मार्कर की स्टाइल को कॉन्फ़िगर करने का तरीका बताया गया है. ऊपर दिए गए किसी भी मार्कर कस्टमाइज़ेशन पैरामीटर का इस्तेमाल करके, किसी भी मार्कर की स्टाइल को पसंद के मुताबिक बनाने के लिए इस पैटर्न का पालन करें.

JavaScript

deliveryVehicleMarkerCustomization = {
  cursor: 'grab'
};

TypeScript

deliveryVehicleMarkerCustomization = {
  cursor: 'grab'
};

कस्टमाइज़ेशन फ़ंक्शन का इस्तेमाल करके मार्कर की स्टाइल बदलें

नीचे दिए गए उदाहरण में, वाहन के मार्कर की स्टाइल को कॉन्फ़िगर करने का तरीका बताया गया है. किसी भी मार्कर की स्टाइल को पसंद के मुताबिक बनाने के लिए, इस पैटर्न का पालन करें. इसके लिए, ऊपर दिए गए किसी भी मार्कर कस्टम पैरामीटर का इस्तेमाल करें.

JavaScript

deliveryVehicleMarkerCustomization =
  (params) => {
    var stopsLeft = params.vehicle.remainingVehicleJourneySegments.length;
    params.marker.setLabel(`${stopsLeft}`);
  };

TypeScript

deliveryVehicleMarkerCustomization =
  (params: DeliveryVehicleMarkerCustomizationFunctionParams) => {
    var stopsLeft = params.vehicle.remainingVehicleJourneySegments.length;
    params.marker.setLabel(`${stopsLeft}`);
  };

मार्कर में क्लिक हैंडलिंग जोड़ें

नीचे दिए गए उदाहरण में, वाहन के मार्कर में क्लिक हैंडलिंग जोड़ने का तरीका बताया गया है. ऊपर दिए गए किसी भी मार्कर कस्टमाइज़ेशन पैरामीटर का इस्तेमाल करके, किसी भी मार्कर में क्लिक हैंडलिंग जोड़ने के लिए इस पैटर्न का पालन करें.

JavaScript

deliveryVehicleMarkerCustomization =
  (params) => {
    if (params.isNew) {
      params.marker.addListener('click', () => {
        // Perform desired action.
      });
    }
  };

TypeScript

deliveryVehicleMarkerCustomization =
  (params: DeliveryVehicleMarkerCustomizationFunctionParams) => {
    if (params.isNew) {
      params.marker.addListener('click', () => {
        // Perform desired action.
      });
    }
  };

दिखाई देने वाले मार्कर फ़िल्टर करें

इस उदाहरण में यह फ़िल्टर करने का तरीका बताया गया है कि कौनसे वाहन के मार्कर दिख रहे हैं. ऊपर दिए गए किसी भी मार्कर कस्टमाइज़ेशन पैरामीटर का इस्तेमाल करके, किसी भी मार्कर को फ़िल्टर करने के लिए, इस पैटर्न का पालन करें.

JavaScript

deliveryVehicleMarkerCustomization =
  (params) => {
    var stopsLeft = params.vehicle.remainingVehicleJourneySegments.length;
    if (stopsLeft > 10) {
      params.marker.setVisible(false);
    }
  };

TypeScript

deliveryVehicleMarkerCustomization =
  (params: DeliveryVehicleMarkerCustomizationFunctionParams) => {
    var stopsLeft = params.vehicle.remainingVehicleJourneySegments.length;
    if (stopsLeft > 10) {
      params.marker.setVisible(false);
    }
  };

वाहन या जगह के मार्कर के लिए InfoWindow दिखाएं

किसी वाहन या जगह के मार्कर के बारे में ज़्यादा जानकारी दिखाने के लिए, InfoWindow का इस्तेमाल किया जा सकता है.

नीचे दिए गए उदाहरण में, InfoWindow बनाने और उसे वाहन के मार्कर से अटैच करने का तरीका बताया गया है.

JavaScript

// 1. Create an info window.
const infoWindow = new google.maps.InfoWindow(
    {disableAutoPan: true});

// (Assumes a delivery vehicle location provider.)
locationProvider.addListener('update', e => {
  if (e.deliveryVehicle) {
    const distance = 
           e.deliveryVehicle.remainingDistanceMeters;
    infoWindow.setContent(
        `Your vehicle is ${distance}m away from the next task.`);

    // 2. Attach the info window to a vehicle marker.   
    // This property can return multiple markers.
    const marker = mapView.vehicleMarkers[0];
    infoWindow.open(mapView.map, marker);
  }
});

// 3. Close the info window.
infoWindow.close();

TypeScript

// 1. Create an info window.
const infoWindow = new google.maps.InfoWindow(
    {disableAutoPan: true});

// (Assumes a delivery vehicle location provider.)
locationProvider.addListener('update', (e: google.maps.journeySharing.FleetEngineDeliveryVehicleLocationProviderUpdateEvent) => {
  if (e.deliveryVehicle) {
    const distance = 
           e.deliveryVehicle.remainingDistanceMeters;
    infoWindow.setContent(
        `Your vehicle is ${distance}m away from the next task.`);

    // 2. Attach the info window to a vehicle marker.   
    // This property can return multiple markers.
    const marker = mapView.vehicleMarkers[0];
    infoWindow.open(mapView.map, marker);
  }
});

// 3. Close the info window.
infoWindow.close();

अपने-आप फ़िट होने की सुविधा बंद करें

अपने-आप फ़िट होने की सुविधा को बंद करके, मैप को व्यूपोर्ट में अपने-आप फ़िट होने से रोका जा सकता है और अनुमानित रास्ते को रोका जा सकता है. नीचे दिए गए उदाहरण में बताया गया है कि यात्रा की जानकारी शेयर करने वाले मैप व्यू को कॉन्फ़िगर करते समय, अपने-आप फ़िट होने की सुविधा को कैसे बंद किया जाए.

JavaScript

const mapView = new
    google.maps.journeySharing.JourneySharingMapView({
  element: document.getElementById('map_canvas'),
  locationProviders: [locationProvider],
  automaticViewportMode:
      google.maps.journeySharing
          .AutomaticViewportMode.NONE,
  ...
});

TypeScript

const mapView = new
    google.maps.journeySharing.JourneySharingMapView({
  element: document.getElementById('map_canvas'),
  locationProviders: [locationProvider],
  automaticViewportMode:
      google.maps.journeySharing
          .AutomaticViewportMode.NONE,
  ...
});

कोई मौजूदा मैप बदलें

आप मार्कर या अन्य कस्टमाइज़ेशन वाले किसी मौजूदा मैप को, उन कस्टमाइज़ेशन को खोए बिना बदल सकते हैं.

उदाहरण के लिए, मान लें कि आपके पास मानक google.maps.Map इकाई वाला एक वेब पेज है, जिस पर मार्कर दिखाया जाता है:

<!DOCTYPE html>
<html>
  <head>
    <style>
       /* Set the size of the div element that contains the map */
      #map {
        height: 400px;  /* The height is 400 pixels */
        width: 100%;  /* The width is the width of the web page */
       }
    </style>
  </head>
  <body>
    <h3>My Google Maps Demo</h3>
    <!--The div element for the map -->
    <div id="map"></div>
    <script>
// Initialize and add the map
function initMap() {
  // The location of Uluru
  var uluru = {lat: -25.344, lng: 131.036};
  // The map, initially centered at Mountain View, CA.
  var map = new google.maps.Map(document.getElementById('map'));
  map.setOptions({center: {lat: 37.424069, lng: -122.0916944}, zoom: 14});

  // The marker, now positioned at Uluru
  var marker = new google.maps.Marker({position: uluru, map: map});
}
    </script>
    <!-- Load the API from the specified URL.
       * The async attribute allows the browser to render the page while the API loads.
       * The key parameter will contain your own API key (which is not needed for this tutorial).
       * The callback parameter executes the initMap() function.
    -->
    <script defer src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&callback=initMap">
    </script>
  </body>
</html>

'JavaScript का सफ़र' शेयर करने की लाइब्रेरी जोड़ने के लिए, जिसमें फ़्लीट ट्रैकिंग शामिल है:

  1. पुष्टि करने वाले टोकन की फ़ैक्ट्री के लिए कोड जोड़ें.
  2. initMap() फ़ंक्शन में जगह की जानकारी देने वाली कंपनी को शुरू करें.
  3. initMap() फ़ंक्शन में मैप व्यू को शुरू करें. इस व्यू में मैप शामिल है.
  4. मैप व्यू शुरू करने के लिए, अपनी पसंद के मुताबिक बनाने की सुविधा को कॉलबैक फ़ंक्शन में ले जाएं.
  5. एपीआई लोडर में, जगह की जानकारी वाली लाइब्रेरी जोड़ें.

नीचे दिए गए उदाहरण में, किए जाने वाले बदलाव दिखाए गए हैं:

<!DOCTYPE html>
<html>
  <head>
    <style>
       /* Set the size of the div element that contains the map */
      #map {
        height: 400px;  /* The height is 400 pixels */
        width: 100%;  /* The width is the width of the web page */
       }
    </style>
  </head>
  <body>
    <h3>My Google Maps Demo</h3>
    <!--The div element for the map -->
    <div id="map"></div>
    <script>
let locationProvider;

// (1) Authentication Token Fetcher
function authTokenFetcher(options) {
  // options is a record containing two keys called 
  // serviceType and context. The developer should
  // generate the correct SERVER_TOKEN_URL and request
  // based on the values of these fields.
  const response = await fetch(SERVER_TOKEN_URL);
      if (!response.ok) {
        throw new Error(response.statusText);
      }
      const data = await response.json();
      return {
        token: data.Token,
        expiresInSeconds: data.ExpiresInSeconds
      };
}

// Initialize and add the map
function initMap() {
  // (2) Initialize location provider. Use FleetEngineDeliveryVehicleLocationProvider
  // as appropriate.
  locationProvider = new google.maps.journeySharing.FleetEngineDeliveryVehicleLocationProvider({
    YOUR_PROVIDER_ID,
    authTokenFetcher,
  });

  // (3) Initialize map view (which contains the map).
  const mapView = new google.maps.journeySharing.JourneySharingMapView({
    element: document.getElementById('map'),
    locationProviders: [locationProvider],
    // any styling options
  });

mapView.addListener('ready', () => {
  locationProvider.deliveryVehicleId = DELIVERY_VEHICLE_ID;

    // (4) Add customizations like before.

    // The location of Uluru
    var uluru = {lat: -25.344, lng: 131.036};
    // The map, initially centered at Mountain View, CA.
    var map = mapView.map;
    map.setOptions({center: {lat: 37.424069, lng: -122.0916944}, zoom: 14});
    // The marker, now positioned at Uluru
    var marker = new google.maps.Marker({position: uluru, map: map});
  };
}
    </script>
    <!-- Load the API from the specified URL
      * The async attribute allows the browser to render the page while the API loads
      * The key parameter will contain your own API key (which is not needed for this tutorial)
      * The callback parameter executes the initMap() function
      *
      * (5) Add the journey sharing library to the API loader, which includes Fleet Tracking functionality.
    -->
    <script defer
    src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&callback=initMap&libraries=journeySharing">
    </script>
  </body>
</html>

अगर आप उलुरु के पास बताए गए आईडी से डिलीवरी वाहन चलाते हैं, तो उसे अब मैप पर दिखाया जाएगा.