نظرة عامة
يوضح لك هذا البرنامج التعليمي كيفية استخدام مجموعات العلامات لعرض عدد كبير من العلامات على إحدى الخرائط. يمكنك استخدام مكتبة @googlemaps/markerclusterer جنبًا إلى جنب مع واجهة برمجة التطبيقات لجافا سكريبت في "خرائط Google" لدمج العلامات القريبة للغاية في المجموعات، وتبسيط عرض العلامات على الخريطة.
لمشاهدة كيفية عمل تجميع العلامات، اعرض الخريطة أدناه.
يشير الرقم الموجود في المجموعة إلى عدد العلامات التي تحتوي عليها. لاحظ أنه عند تكبير أي من مواقع المجموعة، سينخفض العدد في المجموعة، وستبدأ في رؤية العلامات الفردية على الخريطة. ويعمل التصغير من الخريطة على دمج العلامات في مجموعات مرة أخرى.
يعرض النموذج أدناه الرمز الكامل الذي تحتاجه لإنشاء هذه الخريطة.
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;
CSS
/* * 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
<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
. يمكنك استخدام مصادر أخرى للحصول على محدّدات الخريطة لخريطتك.
لمزيد من المعلومات، اطلع على دليل
إنشاء العلامات.
إضافة مجمِّع علامات
اتبع الخطوات التالية لإضافة مجمّع علامات:
- أضف مكتبة تجميع العلامات إلى صفحتك أو تطبيقك. تتوفّر المكتبة على "موسيقى Google Play" على NPM على @googlemaps/markerclusterer وفي المستودع على GitHub.
نبضة في الدقيقة
ثبِّت أحدث إصدار من مكتبة @googlemaps/markerclusterer باستخدام NPM.
npm install @googlemaps/markerclusterer
شبكة عرض المحتوى (CDN)
يحمّل النص البرمجي التالي أحدث إصدار من المكتبة بمعدل 1.x.x من unpkg.com CDN.
<script src="https://unpkg.com/@googlemaps/markerclusterer/dist/index.min.js"></script>
- إضافة مجمِّع علامات في تطبيقك.
يضيف الرمز أدناه أداة تجميع العلامات إلى الخريطة.
نبضة في الدقيقة
import { MarkerClusterer } from "@googlemaps/markerclusterer"; const markerCluster = new MarkerClusterer({ map, markers });
شبكة عرض المحتوى (CDN)
عند الوصول باستخدام شبكة توصيل المحتوى (CDN)، تصبح المكتبة متاحة ضمن النطاق
markerClusterer
العام.const markerCluster = new markerClusterer.MarkerClusterer({ map, markers });
ينقل هذا النموذج الصفيف
markers
إلىMarkerClusterer
. - تخصيص أداة تجميع العلامات
- تخصيص رمز المجموعة من خلال واجهة العارض.
- تعديل الخوارزمية لإنشاء مجموعات.
مزيد من المعلومات
يمكنك الاطّلاع على أمثلة أكثر تعقيدًا على تجميع العلامات في المستودع على GitHub وقراءة المستندات المرجعية للمكتبة.