मार्कर क्लस्टरिंग

प्लैटफ़ॉर्म चुनें: Android iOS JavaScript

खास जानकारी

यह ट्यूटोरियल, आपको मार्कर क्लस्टर का इस्तेमाल करके, मैप पर बड़ी संख्या में मार्कर दिखाने का तरीका बताता है. क्लस्टर में करीबी मार्कर के मार्कर को मिलाने के लिए, और मैप पर मार्कर के प्रदर्शन को आसान बनाने के लिए, आप @googlemaps/mark{/4}er लाइब्रेरी के साथ मैप JavaScript API का प्रयोग कर सकते हैं.

मार्कर क्लस्टरिंग कैसे काम करती है, यह देखने के लिए नीचे दिया गया मैप देखें.

क्लस्टर पर संख्या से पता चलता है कि उसमें कितने मार्कर हैं. ध्यान दें कि जब आप किसी भी क्लस्टर के स्थानों को ज़ूम करते हैं, तो क्लस्टर पर संख्या घट जाती है, और आपको मैप पर अलग-अलग मार्कर दिखने लगते हैं. मैप को ज़ूम आउट करने से, मार्कर फिर से क्लस्टर में बन जाते हैं.

नीचे दिया गया नमूना वह पूरा कोड दिखाता है, जो आपको यह मैप बनाने के लिए चाहिए.

TypeScript

function initMap(): void {
  const map = new google.maps.Map(
    document.getElementById("map") as HTMLElement,
    {
      zoom: 3,
      center: { lat: -28.024, lng: 140.887 },
    }
  );

  const infoWindow = new google.maps.InfoWindow({
    content: "",
    disableAutoPan: true,
  });

  // Create an array of alphabetical characters used to label the markers.
  const labels = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

  // Add some markers to the map.
  const markers = locations.map((position, i) => {
    const label = labels[i % labels.length];
    const marker = new google.maps.Marker({
      position,
      label,
    });

    // markers can only be keyboard focusable when they have click listeners
    // open info window when marker is clicked
    marker.addListener("click", () => {
      infoWindow.setContent(label);
      infoWindow.open(map, marker);
    });

    return marker;
  });

  // Add a marker clusterer to manage the markers.
  new MarkerClusterer({ markers, map });
}

const locations = [
  { lat: -31.56391, lng: 147.154312 },
  { lat: -33.718234, lng: 150.363181 },
  { lat: -33.727111, lng: 150.371124 },
  { lat: -33.848588, lng: 151.209834 },
  { lat: -33.851702, lng: 151.216968 },
  { lat: -34.671264, lng: 150.863657 },
  { lat: -35.304724, lng: 148.662905 },
  { lat: -36.817685, lng: 175.699196 },
  { lat: -36.828611, lng: 175.790222 },
  { lat: -37.75, lng: 145.116667 },
  { lat: -37.759859, lng: 145.128708 },
  { lat: -37.765015, lng: 145.133858 },
  { lat: -37.770104, lng: 145.143299 },
  { lat: -37.7737, lng: 145.145187 },
  { lat: -37.774785, lng: 145.137978 },
  { lat: -37.819616, lng: 144.968119 },
  { lat: -38.330766, lng: 144.695692 },
  { lat: -39.927193, lng: 175.053218 },
  { lat: -41.330162, lng: 174.865694 },
  { lat: -42.734358, lng: 147.439506 },
  { lat: -42.734358, lng: 147.501315 },
  { lat: -42.735258, lng: 147.438 },
  { lat: -43.999792, lng: 170.463352 },
];

declare global {
  interface Window {
    initMap: () => void;
  }
}
window.initMap = initMap;

JavaScript

function initMap() {
  const map = new google.maps.Map(document.getElementById("map"), {
    zoom: 3,
    center: { lat: -28.024, lng: 140.887 },
  });
  const infoWindow = new google.maps.InfoWindow({
    content: "",
    disableAutoPan: true,
  });
  // Create an array of alphabetical characters used to label the markers.
  const labels = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  // Add some markers to the map.
  const markers = locations.map((position, i) => {
    const label = labels[i % labels.length];
    const marker = new google.maps.Marker({
      position,
      label,
    });

    // markers can only be keyboard focusable when they have click listeners
    // open info window when marker is clicked
    marker.addListener("click", () => {
      infoWindow.setContent(label);
      infoWindow.open(map, marker);
    });
    return marker;
  });

  // Add a marker clusterer to manage the markers.
  new MarkerClusterer({ markers, map });
}

const locations = [
  { lat: -31.56391, lng: 147.154312 },
  { lat: -33.718234, lng: 150.363181 },
  { lat: -33.727111, lng: 150.371124 },
  { lat: -33.848588, lng: 151.209834 },
  { lat: -33.851702, lng: 151.216968 },
  { lat: -34.671264, lng: 150.863657 },
  { lat: -35.304724, lng: 148.662905 },
  { lat: -36.817685, lng: 175.699196 },
  { lat: -36.828611, lng: 175.790222 },
  { lat: -37.75, lng: 145.116667 },
  { lat: -37.759859, lng: 145.128708 },
  { lat: -37.765015, lng: 145.133858 },
  { lat: -37.770104, lng: 145.143299 },
  { lat: -37.7737, lng: 145.145187 },
  { lat: -37.774785, lng: 145.137978 },
  { lat: -37.819616, lng: 144.968119 },
  { lat: -38.330766, lng: 144.695692 },
  { lat: -39.927193, lng: 175.053218 },
  { lat: -41.330162, lng: 174.865694 },
  { lat: -42.734358, lng: 147.439506 },
  { lat: -42.734358, lng: 147.501315 },
  { lat: -42.735258, lng: 147.438 },
  { lat: -43.999792, lng: 170.463352 },
];

window.initMap = initMap;

सीएसएस

/* 
 * Always set the map height explicitly to define the size of the div element
 * that contains the map. 
 */
#map {
  height: 100%;
}

/* 
 * Optional: Makes the sample page fill the window. 
 */
html,
body {
  height: 100%;
  margin: 0;
  padding: 0;
}

एचटीएमएल

<html>
  <head>
    <title>Marker Clustering</title>
    <script src="https://polyfill.io/v3/polyfill.min.js?features=default"></script>

    <link rel="stylesheet" type="text/css" href="./style.css" />
    <script type="module" src="./index.js"></script>
  </head>
  <body>
    <div id="map"></div>

    <!-- 
      The `defer` attribute causes the callback to execute after the full HTML
      document has been parsed. For non-blocking uses, avoiding race conditions,
      and consistent behavior across browsers, consider loading using Promises.
      See https://developers.google.com/maps/documentation/javascript/load-maps-js-api
      for more information.
      -->
    <script
      src="https://maps.googleapis.com/maps/api/js?key=AIzaSyB41DRUbKWJHPxaFjMAwdrzWzbVKartNGg&callback=initMap&v=weekly"
      defer
    ></script>
  </body>
</html>

सैंपल आज़माएं

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

मार्कर क्लस्टर जोड़ा जा रहा है

मार्कर क्लस्टर जोड़ने के लिए, नीचे दिया गया तरीका अपनाएं:

  1. अपने पेज या ऐप्लिकेशन में मार्कर क्लस्टरिंग लाइब्रेरी जोड़ें. यह लाइब्रेरी NPM पर @googlemaps/mark{/4}er और GitHub पररिपॉज़िटरी में उपलब्ध है.

    एनपीएम

    NPM का उपयोग करके @googlemaps/mark{/4}er लाइब्रेरी का नवीनतम वर्शन इंस्टॉल करें.

    npm install @googlemaps/markerclusterer

    सीडीएन

    नीचे दी गई स्क्रिप्ट, unpkg.com CDN से लाइब्रेरी का नवीनतम 1.x.x वर्शन लोड करती है.

    <script src="https://unpkg.com/@googlemaps/markerclusterer/dist/index.min.js"></script>
  2. अपने ऐप्लिकेशन में मार्कर क्लस्टर जोड़ें.

    नीचे दिया गया कोड, मैप में मार्कर क्लस्टर जोड़ता है.

    एनपीएम

    import { MarkerClusterer } from "@googlemaps/markerclusterer";
    
    const markerCluster = new MarkerClusterer({ map, markers });

    सीडीएन

    सीडीएन से ऐक्सेस करने पर, लाइब्रेरी दुनिया भर में markerClusterer के तहत उपलब्ध होती है.

    const markerCluster = new markerClusterer.MarkerClusterer({ map, markers });

    यह नमूना markers श्रेणी को MarkerClusterer में पास करता है.

  3. मार्कर क्लस्टर को पसंद के मुताबिक बनाएं.

ज़्यादा जानें

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