نظرة عامة
يوفر صف DrawingManager واجهة رسومية للمستخدمين لرسم المضلعات والمستطيلات والخطوط المتعددة والدوائر والعلامات على الخريطة.
استخدام "المكتبة"
أدوات الرسم هي مكتبة مستقلة ومنفصلة عن رمز JavaScript الرئيسي لواجهة برمجة التطبيقات Maps API. لاستخدام الوظائف المضمّنة في هذه المكتبة،
عليك أولاً تحميلها باستخدام المَعلمة libraries في
عنوان URL الخاص ببرنامج Maps API التمهيدي:
<script async
src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&loading=async&libraries=drawing&callback=initMap">
</script>بعد إضافة مَعلمة libraries، يمكنك إنشاء DrawingManager
كائن على النحو التالي:
var drawingManager = new google.maps.drawing.DrawingManager(); drawingManager.setMap(map);
خيارات DrawingManager
يأخذ منشئ DrawingManager مجموعة من الخيارات التي تحدّد مجموعة عناصر التحكّم التي سيتم عرضها وموضع عنصر التحكّم وحالة الرسم الأولية.
- تحدّد السمة
drawingModeالخاصة بالعنصرDrawingManagerحالة الرسم الأولية في DrawingManager. يقبل هذا النوع قيمة ثابتةgoogle.maps.drawing.OverlayType. القيمة التلقائية هيnull، وفي هذه الحالة يكون المؤشر في وضع غير مخصّص للرسم عند إعداد DrawingManager. - تحدّد السمة
drawingControlالخاصة بالعنصرDrawingManagerما إذا كان سيتم عرض واجهة اختيار أدوات الرسم على الخريطة. يقبل قيمة منطقية. - يمكنك أيضًا تحديد موضع عنصر التحكّم وأنواع التراكبات التي يجب تمثيلها في عنصر التحكّم باستخدام السمة
drawingControlOptionsالخاصة بالعنصرDrawingManager.- يحدّد
positionموضع عنصر التحكّم في الرسم على الخريطة، ويقبل قيمة ثابتةgoogle.maps.ControlPosition. -
drawingModesهي مصفوفة من ثوابتgoogle.maps.drawing.OverlayType، وتحدّد أنواع التراكب التي سيتم تضمينها في أداة اختيار شكل عنصر التحكّم في الرسم. سيكون رمز اليد متاحًا دائمًا، ما يتيح للمستخدم التفاعل مع الخريطة بدون رسم. سيتطابق ترتيب الأدوات في عنصر التحكّم مع ترتيب تعريفها في المصفوفة.
- يحدّد
- يمكن تعيين مجموعة من الخصائص التلقائية لكل نوع من أنواع التراكبات، وهي الخصائص التي تحدّد مظهر التراكب عند إنشائه لأول مرة. يتم تحديد هذه القيم في السمة
{overlay}Optionsالخاصة بالتراكب (حيث يمثّل{overlay}نوع التراكب). على سبيل المثال، يمكن تحديد خصائص التعبئة والحدود الخارجية والدقة zIndex وإمكانية النقر على الدائرة باستخدام السمةcircleOptions. في حال تم تمرير أي قيم للحجم أو الموقع الجغرافي أو الخريطة، سيتم تجاهلها. للحصول على التفاصيل الكاملة حول الخصائص التي يمكن ضبطها، يُرجى الرجوع إلى مستندات مرجع واجهة برمجة التطبيقات.
ملاحظة: لجعل شكل قابلاً للتعديل من قِبل المستخدم بعد إنشائه، اضبط قيمة الخاصية editable على true.
TypeScript
// This example requires the Drawing library. Include the libraries=drawing // parameter when you first load the API. For example: // <script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&libraries=drawing"> function initMap(): void { const map = new google.maps.Map( document.getElementById("map") as HTMLElement, { center: { lat: -34.397, lng: 150.644 }, zoom: 8, } ); const drawingManager = new google.maps.drawing.DrawingManager({ drawingMode: google.maps.drawing.OverlayType.MARKER, drawingControl: true, drawingControlOptions: { position: google.maps.ControlPosition.TOP_CENTER, drawingModes: [ google.maps.drawing.OverlayType.MARKER, google.maps.drawing.OverlayType.CIRCLE, google.maps.drawing.OverlayType.POLYGON, google.maps.drawing.OverlayType.POLYLINE, google.maps.drawing.OverlayType.RECTANGLE, ], }, markerOptions: { icon: "https://developers.google.com/maps/documentation/javascript/examples/full/images/beachflag.png", }, circleOptions: { fillColor: "#ffff00", fillOpacity: 1, strokeWeight: 5, clickable: false, editable: true, zIndex: 1, }, }); drawingManager.setMap(map); } declare global { interface Window { initMap: () => void; } } window.initMap = initMap;
JavaScript
// This example requires the Drawing library. Include the libraries=drawing // parameter when you first load the API. For example: // <script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&libraries=drawing"> function initMap() { const map = new google.maps.Map(document.getElementById("map"), { center: { lat: -34.397, lng: 150.644 }, zoom: 8, }); const drawingManager = new google.maps.drawing.DrawingManager({ drawingMode: google.maps.drawing.OverlayType.MARKER, drawingControl: true, drawingControlOptions: { position: google.maps.ControlPosition.TOP_CENTER, drawingModes: [ google.maps.drawing.OverlayType.MARKER, google.maps.drawing.OverlayType.CIRCLE, google.maps.drawing.OverlayType.POLYGON, google.maps.drawing.OverlayType.POLYLINE, google.maps.drawing.OverlayType.RECTANGLE, ], }, markerOptions: { icon: "https://developers.google.com/maps/documentation/javascript/examples/full/images/beachflag.png", }, circleOptions: { fillColor: "#ffff00", fillOpacity: 1, strokeWeight: 5, clickable: false, editable: true, zIndex: 1, }, }); drawingManager.setMap(map); } window.initMap = initMap;
تجربة عيّنة
تعديل عنصر التحكّم في أدوات الرسم
بعد إنشاء الكائن DrawingManager، يمكنك تعديله من خلال استدعاء setOptions() وتمرير قيم جديدة.
drawingManager.setOptions({ drawingControlOptions: { position: google.maps.ControlPosition.BOTTOM_LEFT, drawingModes: ['marker'] } });
لإخفاء أو إظهار عنصر التحكّم في أدوات الرسم، اتّبِع الخطوات التالية:
// To hide: drawingManager.setOptions({ drawingControl: false }); // To show: drawingManager.setOptions({ drawingControl: true });
لإزالة عنصر التحكّم في أدوات الرسم من العنصر map:
drawingManager.setMap(null);
يؤدي إخفاء عنصر التحكّم في الرسم إلى عدم عرض عنصر التحكّم في أدوات الرسم،
ولكن تظل جميع وظائف الفئة DrawingManager متاحة.
بهذه الطريقة، يمكنك تنفيذ عنصر التحكّم الخاص بك. تؤدي إزالة
DrawingManager من العنصر map إلى إيقاف جميع وظائف الرسم، ويجب إعادة ربطها بالخريطة باستخدام drawingManager.setMap(map) أو إنشاء عنصر DrawingManager جديد إذا أردت استعادة ميزات الرسم.
فعّاليات الرسم
عند إنشاء تراكب شكل، يتم إطلاق حدثَين:
- حدث
{overlay}complete(حيث يمثّل{overlay}نوع الإعلان الظاهر على سطح الفيديو، مثلcirclecompleteأوpolygoncompleteأو غير ذلك) يتم تمرير مرجع إلى التراكب كوسيطة. - حدث
overlaycompleteيتم تمرير قيمة حرفية لكائن تحتوي علىOverlayTypeومرجع إلى التراكب كوسيطة.
google.maps.event.addListener(drawingManager, 'circlecomplete', function(circle) { var radius = circle.getRadius(); }); google.maps.event.addListener(drawingManager, 'overlaycomplete', function(event) { if (event.type == 'circle') { var radius = event.overlay.getRadius(); } });
يُرجى العِلم أنّه يتم إيقاف google.maps.Map
الأحداث، مثل click وmousemove، أثناء الرسم على الخريطة.