- مقدمة
- خصائص الرمز
- الرموز المحدّدة مسبقًا
- إضافة رمز إلى علامة
- إضافة رمز إلى خط متعدد الأضلاع
- إضافة تأثيرات حركية إلى رمز
مقدمة
Symbol
هو رمز مستند إلى متّجه يمكن عرضه على عنصر
Marker
أو
Polyline
. يتم تحديد شكل الرمز من خلال مسار باستخدام
ترميز مسار SVG.
على الرغم من أنّ path
هي السمة الوحيدة المطلوبة، فإنّ Symbol
يتوافق مع مجموعة متنوعة من السمات التي تتيح لك
تخصيص الجوانب المرئية، مثل لون الحدّ وكثافته
وتعبئته. اطّلِع على قائمة السمات.
تتوفّر عدة رموز محدّدة مسبقًا من خلال فئة SymbolPath
. يمكنك الاطّلاع على القائمة أدناه.
خصائص الرمز
يُرجى العلم أنّ السلوك التلقائي لعنصر Symbol
يختلف قليلاً
حسب ما إذا كان يظهر على علامة أو خط متعدد الأضلاع. ويكون التباين في هذه الخصائص
موضّحًا في قائمة المواقع أدناه.
تتيح Symbol
السمات التالية:
-
path
(مطلوبة) هي المسار الذي يحدّد شكل الرمز. يمكنك استخدام أحد المسارات المحدّدة مسبقًا فيgoogle.maps.SymbolPath
أو تحديد مسار مخصّص باستخدام ترميز مسار SVG. ملاحظة: يجب أن تلائم مسارات المتجهات على خط متعدد الأضلاع مربّعًا أبعاده 22×22 بكسل. إذا كان المسار يتضمّن نقاطًا خارج هذا المربّع، عليك تعديل سمةscale
للرمز إلى قيمة كسرية، مثل 0.2، لكي تتناسب النقاط التي تمّت تصغيرها ضمن المربّع. - تضبط
anchor
موضع الرمز بالنسبة إلى العلامة أو الخط المتعدّد. يتم نقل إحداثيات مسار الرمز إلى اليسار والاتجاه للأعلى باستخدام إحداثيات x وy للرابط على التوالي. يتم تلقائيًا تثبيت الرمز في(0, 0)
. يتم التعبير عن الموضع في نظام الإحداثيات نفسه المستخدَم في مسار الرمز. fillColor
هو لون تعبئة الرمز (أي المنطقة التي تحيط بها المساحة). تتوفّر جميع ألوان CSS3 باستثناء الألوان المُسمّاة الموسّعة. بالنسبة إلى الرموز على العلامات، تكون القيمة التلقائية هي "أسود". بالنسبة إلى الرموز على الخطوط المتعددة، يكون اللون التلقائي هو لون الخطوط للخط المتعدد المقابل.- تحدّد
fillOpacity
التعتيم النسبي (أي عدم الشفافية) لملء الرمز. تتراوح القيم بين 0.0 (شفاف بالكامل) و1.0 (غير شفاف بالكامل). القيمة التلقائية هي 0.0. rotation
هي الزاوية التي يتم من خلالها تدوير الرمز، ويُشار إليها بالدقائق في اتجاه عقارب الساعة. يكون زاوية دوران علامة الرمز افتراضيًا 0، ويتم تدوير الرمز على شكل خط متعدد الأضلاع بزاوية الحافة التي يقع عليها. سيؤدي ضبط دوران رمز على خط متعدد الأجزاء إلى تثبيت دوران الرمز بحيث لا يتبع منحنى الخط بعد ذلك.scale
لضبط الكمية التي يتم بها تكبير الرمز. بالنسبة إلى علامات الرموز، يكون المقياس التلقائي هو 1. بعد تغيير حجم الرمز، يمكن أن يكون بأي حجم. بالنسبة إلى الرموز على شكل خط متعدد، يكون المقياس التلقائي هو سمك الخطوط المرسومة للخط المتعدّد. بعد التكبير، يجب أن يكون الرمز داخل مربّع أبعاده 22×22 بكسل، في منتصف نقطة إرساء الرمز.strokeColor
هو لون مخطّط الرمز. تتوفّر جميع ألوان CSS3 باستثناء الألوان المُسمّاة الموسّعة. بالنسبة إلى الرموز على العلامات، تكون القيمة التلقائية هي "أسود". بالنسبة إلى الرموز على الخطوط المتعددة، يكون اللون التلقائي هو لون الخطوط المتعددة.- تحدّد
strokeOpacity
مستوى التعتيم النسبي (أي عدم الشفافية) لخط الرمز. تتراوح القيم بين 0.0 (شفاف بالكامل) و1.0 (غير شفاف بالكامل). بالنسبة إلى علامات الرموز، تكون القيمة التلقائية هي 1.0. بالنسبة إلى الرموز على الخطوط المتعددة، يكون الإعداد التلقائي هو مستوى تمويه الخطوط للخط المتعدّد. strokeWeight
يحدِّد سمك مخطّط الرمز. القيمة التلقائية هيscale
للرمز.
الرموز المحدّدة مسبقًا
توفّر واجهة برمجة تطبيقات JavaScript لـ "خرائط Google" بعض الرموز المضمّنة التي يمكنك
إضافتها إلى العلامات أو الخطوط المتعددة من خلال فئة
SymbolPath
.
تشمل الرموز التلقائية دائرة ونوعين من الأسهم. تتوفّر سهام موجّهة للأمام وللخلف. ويفيد ذلك بشكل خاص في المضلّعات، لأنّ اتجاه الرمز على المضلّع ثابت. يُعتبر الاتجاه إلى الأمام هو اتجاه نهاية الخطوط المتعددة.
يمكنك تعديل الخطوط أو الحشو للرموزال المحدّدة مسبقًا باستخدام أي من خيارات الرموز التلقائية.
يتم تضمين الرموز المحدّدة مسبقًا التالية:
الاسم | الوصف | مثال |
---|---|---|
google.maps.SymbolPath.CIRCLE |
دائرة | |
google.maps.SymbolPath.BACKWARD_CLOSED_ARROW |
سهم يشير إلى الخلف وهو مغلق من جميع الجهات | |
google.maps.SymbolPath.FORWARD_CLOSED_ARROW |
سهم يشير إلى الأمام ومغلق من جميع الجوانب | |
google.maps.SymbolPath.BACKWARD_OPEN_ARROW |
سهم يشير إلى الخلف ومفتوح من جانب واحد | |
google.maps.SymbolPath.FORWARD_OPEN_ARROW |
سهم يشير إلى الأمام ومفتوح من جانب واحد |
إضافة رمز إلى علامة
لعرض رمز مستند إلى متّجه على
علامة، نقْل عنصرًا جامدًا
Symbol
مع المسار المطلوب إلى سمة
icon
للعلامة. يستخدم المثال التالي
ترميز مسار SVG
لإنشاء رمز مخصّص لمؤشر.
TypeScript
// This example uses SVG path notation to add a vector-based symbol // as the icon for a marker. The resulting icon is a marker-shaped // symbol with a blue fill and no border. function initMap(): void { const center = new google.maps.LatLng(-33.712451, 150.311823); const map = new google.maps.Map( document.getElementById("map") as HTMLElement, { zoom: 9, center: center, } ); const svgMarker = { path: "M-1.547 12l6.563-6.609-1.406-1.406-5.156 5.203-2.063-2.109-1.406 1.406zM0 0q2.906 0 4.945 2.039t2.039 4.945q0 1.453-0.727 3.328t-1.758 3.516-2.039 3.070-1.711 2.273l-0.75 0.797q-0.281-0.328-0.75-0.867t-1.688-2.156-2.133-3.141-1.664-3.445-0.75-3.375q0-2.906 2.039-4.945t4.945-2.039z", fillColor: "blue", fillOpacity: 0.6, strokeWeight: 0, rotation: 0, scale: 2, anchor: new google.maps.Point(0, 20), }; new google.maps.Marker({ position: map.getCenter(), icon: svgMarker, map: map, }); } declare global { interface Window { initMap: () => void; } } window.initMap = initMap;
JavaScript
// This example uses SVG path notation to add a vector-based symbol // as the icon for a marker. The resulting icon is a marker-shaped // symbol with a blue fill and no border. function initMap() { const center = new google.maps.LatLng(-33.712451, 150.311823); const map = new google.maps.Map(document.getElementById("map"), { zoom: 9, center: center, }); const svgMarker = { path: "M-1.547 12l6.563-6.609-1.406-1.406-5.156 5.203-2.063-2.109-1.406 1.406zM0 0q2.906 0 4.945 2.039t2.039 4.945q0 1.453-0.727 3.328t-1.758 3.516-2.039 3.070-1.711 2.273l-0.75 0.797q-0.281-0.328-0.75-0.867t-1.688-2.156-2.133-3.141-1.664-3.445-0.75-3.375q0-2.906 2.039-4.945t4.945-2.039z", fillColor: "blue", fillOpacity: 0.6, strokeWeight: 0, rotation: 0, scale: 2, anchor: new google.maps.Point(0, 20), }; new google.maps.Marker({ position: map.getCenter(), icon: svgMarker, map: map, }); } window.initMap = initMap;
تجربة عيّنة
إضافة رمز إلى خط متعدد الأضلاع
لعرض الرموز على خطّ متعدد الأضلاع، اضبط السمة icons[]
لموضوع
PolylineOptions
. تأخذ صفيف icons[]
عنصرًا واحدًا أو أكثر من عناصر
IconSequence
الثابتة، مع
السمات التالية:
-
icon
(مطلوب) هو الرمز الذي يتم عرضه على السطر. offset
يحدّد المسافة من بداية السطر التي سيتم عرض الرمز فيها. يمكن التعبير عن هذه المسافة كنسبة مئوية من طول الخط (على سبيل المثال، "50%") أو بوحدات البكسل (على سبيل المثال، "50px"). القيمة التلقائية هي "100%".repeat
لتحديد المسافة بين الرموز المتتالية على الخط ويمكن التعبير عن هذه المسافة كنسبة مئوية من طول الخط (على سبيل المثال، "50%") أو بوحدات البكسل (على سبيل المثال، "50px"). لإيقاف تكرار الرمز، حدِّد "0". القيمة التلقائية هي 0.
باستخدام مجموعة من الرموز وفئة PolylineOptions
،
يمكنك التحكّم بشكل كبير في مظهر الخطوط المتعددة على خريطتك.
في ما يلي بعض الأمثلة على عمليات التخصيص التي يمكنك تطبيقها.
الأسهم
استخدِم السمة IconSequence.offset
لإضافة سهام إلى
بداية أو نهاية الخط المتعدّد.
// Define a symbol using a predefined path (an arrow) // supplied by the Google Maps JavaScript API. var lineSymbol = { path: google.maps.SymbolPath.FORWARD_CLOSED_ARROW }; // Create the polyline and add the symbol via the 'icons' property. var line = new google.maps.Polyline({ path: [{lat: 22.291, lng: 153.027}, {lat: 18.291, lng: 153.027}], icons: [{ icon: lineSymbol, offset: '100%' }], map: map });
الخطوط المتقطّعة
يمكنك الحصول على تأثير خط متقطّع من خلال ضبط شفافية خطك المتعدّد الخطوط على 0، ووضع رمز غير شفاف فوق الخط في فواصل زمنية منتظمة.
// Define a symbol using SVG path notation, with an opacity of 1. var lineSymbol = { path: 'M 0,-1 0,1', strokeOpacity: 1, scale: 4 }; // Create the polyline, passing the symbol in the 'icons' property. // Give the line an opacity of 0. // Repeat the symbol at intervals of 20 pixels to create the dashed effect. var line = new google.maps.Polyline({ path: [{lat: 22.291, lng: 153.027}, {lat: 18.291, lng: 153.027}], strokeOpacity: 0, icons: [{ icon: lineSymbol, offset: '0', repeat: '20px' }], map: map });
المسارات المخصّصة
تتيح لك الرموز المخصّصة إضافة العديد من الأشكال المختلفة إلى شكل متعدد الأضلاع.
// Define the custom symbols. All symbols are defined via SVG path notation. // They have varying stroke color, fill color, stroke weight, // opacity and rotation properties. var symbolOne = { path: 'M -2,0 0,-2 2,0 0,2 z', strokeColor: '#F00', fillColor: '#F00', fillOpacity: 1 }; var symbolTwo = { path: 'M -1,0 A 1,1 0 0 0 -3,0 1,1 0 0 0 -1,0M 1,0 A 1,1 0 0 0 3,0 1,1 0 0 0 1,0M -3,3 Q 0,5 3,3', strokeColor: '#00F', rotation: 45 }; var symbolThree = { path: 'M -2,-2 2,2 M 2,-2 -2,2', strokeColor: '#292', strokeWeight: 4 }; // Create the polyline and add the symbols via the 'icons' property. var line = new google.maps.Polyline({ path: [{lat: 22.291, lng: 153.027}, {lat: 18.291, lng: 153.027}], icons: [ { icon: symbolOne, offset: '0%' }, { icon: symbolTwo, offset: '50%' }, { icon: symbolThree, offset: '100%' } ], map: map });
إضافة تأثيرات حركية إلى رمز
يمكنك إضافة تأثير متحركة إلى رمز على طول مسار باستخدام دالة DOM
window.setInterval()
لتغيير القيمة المرجعية للرمز
على فترات ثابتة.
TypeScript
// This example adds an animated symbol to a polyline. function initMap(): void { const map = new google.maps.Map( document.getElementById("map") as HTMLElement, { center: { lat: 20.291, lng: 153.027 }, zoom: 6, mapTypeId: "terrain", } ); // Define the symbol, using one of the predefined paths ('CIRCLE') // supplied by the Google Maps JavaScript API. const lineSymbol = { path: google.maps.SymbolPath.CIRCLE, scale: 8, strokeColor: "#393", }; // Create the polyline and add the symbol to it via the 'icons' property. const line = new google.maps.Polyline({ path: [ { lat: 22.291, lng: 153.027 }, { lat: 18.291, lng: 153.027 }, ], icons: [ { icon: lineSymbol, offset: "100%", }, ], map: map, }); animateCircle(line); } // Use the DOM setInterval() function to change the offset of the symbol // at fixed intervals. function animateCircle(line: google.maps.Polyline) { let count = 0; window.setInterval(() => { count = (count + 1) % 200; const icons = line.get("icons"); icons[0].offset = count / 2 + "%"; line.set("icons", icons); }, 20); } declare global { interface Window { initMap: () => void; } } window.initMap = initMap;
JavaScript
// This example adds an animated symbol to a polyline. function initMap() { const map = new google.maps.Map(document.getElementById("map"), { center: { lat: 20.291, lng: 153.027 }, zoom: 6, mapTypeId: "terrain", }); // Define the symbol, using one of the predefined paths ('CIRCLE') // supplied by the Google Maps JavaScript API. const lineSymbol = { path: google.maps.SymbolPath.CIRCLE, scale: 8, strokeColor: "#393", }; // Create the polyline and add the symbol to it via the 'icons' property. const line = new google.maps.Polyline({ path: [ { lat: 22.291, lng: 153.027 }, { lat: 18.291, lng: 153.027 }, ], icons: [ { icon: lineSymbol, offset: "100%", }, ], map: map, }); animateCircle(line); } // Use the DOM setInterval() function to change the offset of the symbol // at fixed intervals. function animateCircle(line) { let count = 0; window.setInterval(() => { count = (count + 1) % 200; const icons = line.get("icons"); icons[0].offset = count / 2 + "%"; line.set("icons", icons); }, 20); } window.initMap = initMap;