يمكنك إضافة أشكال مختلفة إلى خريطتك. الشكل هو عنصر على الخريطة مرتبط بخط عرض/خط طول. تتوفّر الأشكال التالية: الخطوط والمضلّعات، الدوائر والمستطيلات. يمكنك أيضًا ضبط الأشكال بحيث يمكن للمستخدمين تعديلها أو سحبها.
الخطوط المتعددة
لرسم خط على الخريطة، استخدِم خطًا متعدّد الأجزاء. تحدِّد فئة
Polyline
عنصرًا تراكميًا خطيًا لمقاطع خط
متصلة على الخريطة. يتألّف عنصر Polyline
من صفيف
للمواقع الجغرافية LatLng
، وينشئ سلسلة من أجزاء الخطوط التي
تربط هذه المواقع الجغرافية في تسلسل مرتّب.
إضافة خط متعدد
يأخذ مُنشئ Polyline
مجموعة من
PolylineOptions
لتحديد LatLng
إحداثيات الخط ومجموعة من الأنماط لضبط السلوك البصري
للخط المتعدّد.
يتم رسم أجسام Polyline
على شكل سلسلة من الأجزاء المستقيمة على
الخريطة. يمكنك تحديد ألوان مخصّصة ودرجات سماكة وعتمات مخصّصة للخط المرسوم
للخط ضمن PolylineOptions
عند
إنشاء الخط، أو يمكنك تغيير هذه السمات بعد الإنشاء.
تتيح الخطوط المتعددة أنماط الخطوط التالية:
strokeColor
يحدّد لون HTML سداسي عشريًا بالتنسيق"#FFFFFF"
. لا تتيح فئةPolyline
استخدام الألوان المُسمّاة.- تحدِّد
strokeOpacity
قيمة رقمية تتراوح بين0.0
و1.0
لتحديد مستوى شفافية لون الخط. القيمة التلقائية هي1.0
. strokeWeight
تحدِّد عرض الخط بالبكسل.
تحدّد سمة editable
لخطّ البوليلين ما إذا كان بإمكان المستخدِمين تعديل الشكل. اطّلِع على الأشكال القابلة للتعديل من قِبل المستخدم
أدناه. وبالمثل، يمكنك ضبط سمة draggable
للسماح
للمستخدمين بجرّ الخط.
TypeScript
// This example creates a 2-pixel-wide red polyline showing the path of // the first trans-Pacific flight between Oakland, CA, and Brisbane, // Australia which was made by Charles Kingsford Smith. function initMap(): void { const map = new google.maps.Map( document.getElementById("map") as HTMLElement, { zoom: 3, center: { lat: 0, lng: -180 }, mapTypeId: "terrain", } ); const flightPlanCoordinates = [ { lat: 37.772, lng: -122.214 }, { lat: 21.291, lng: -157.821 }, { lat: -18.142, lng: 178.431 }, { lat: -27.467, lng: 153.027 }, ]; const flightPath = new google.maps.Polyline({ path: flightPlanCoordinates, geodesic: true, strokeColor: "#FF0000", strokeOpacity: 1.0, strokeWeight: 2, }); flightPath.setMap(map); } declare global { interface Window { initMap: () => void; } } window.initMap = initMap;
JavaScript
// This example creates a 2-pixel-wide red polyline showing the path of // the first trans-Pacific flight between Oakland, CA, and Brisbane, // Australia which was made by Charles Kingsford Smith. function initMap() { const map = new google.maps.Map(document.getElementById("map"), { zoom: 3, center: { lat: 0, lng: -180 }, mapTypeId: "terrain", }); const flightPlanCoordinates = [ { lat: 37.772, lng: -122.214 }, { lat: 21.291, lng: -157.821 }, { lat: -18.142, lng: 178.431 }, { lat: -27.467, lng: 153.027 }, ]; const flightPath = new google.maps.Polyline({ path: flightPlanCoordinates, geodesic: true, strokeColor: "#FF0000", strokeOpacity: 1.0, strokeWeight: 2, }); flightPath.setMap(map); } window.initMap = initMap;
تجربة عيّنة
إزالة خط متعدد الأضلاع
لإزالة خط متعدّد الأضلاع من الخريطة، استخدِم الطريقة setMap()
مع تمرير null
كوسيطة. في المثال التالي،
flightPath
هو عنصر خط متعدد الأضلاع:
flightPath.setMap(null);
يُرجى العلم أنّ الطريقة أعلاه لا تؤدي إلى حذف الخط المتعدّد. يؤدي ذلك إلى إزالة
الخط المتعدّد الأضلاع من الخريطة. إذا أردت بدلاً من ذلك حذف الخط المتعدّد،
عليك إزالته من الخريطة، ثم ضبط
الخط المتعدّد نفسه على null
.
فحص خط متعدد
تحدّد الخطوط المتعددة سلسلة من الإحداثيات على أنّها صفيف من عناصر
LatLng
. وتحدِّد هذه الإحداثيات مسار الخط.
لاسترداد الإحداثيات، استخدِم الدالة getPath()
التي ستعرض صفيفًا من النوع MVCArray
. يمكنك
التلاعب بالصفيف وفحصه باستخدام العمليات التالية:
- تعرِض
getAt()
العنصرLatLng
عند قيمة فهرس مستندة إلى الصفر معيّنة. - تُدرج
insertAt()
LatLng
تم تمريرها في قيمة فهرس مستندة إلى الصفر. يُرجى العِلم أنّه يتم نقل أي إحداثيات حالية في قيمة الفهرس هذه إلى الأمام. - تزيل
removeAt()
LatLng
في قيمة فهرس مستندة إلى الصفر معيّنة.
TypeScript
// This example creates an interactive map which constructs a polyline based on // user clicks. Note that the polyline only appears once its path property // contains two LatLng coordinates. let poly: google.maps.Polyline; let map: google.maps.Map; function initMap(): void { map = new google.maps.Map(document.getElementById("map") as HTMLElement, { zoom: 7, center: { lat: 41.879, lng: -87.624 }, // Center the map on Chicago, USA. }); poly = new google.maps.Polyline({ strokeColor: "#000000", strokeOpacity: 1.0, strokeWeight: 3, }); poly.setMap(map); // Add a listener for the click event map.addListener("click", addLatLng); } // Handles click events on a map, and adds a new point to the Polyline. function addLatLng(event: google.maps.MapMouseEvent) { const path = poly.getPath(); // Because path is an MVCArray, we can simply append a new coordinate // and it will automatically appear. path.push(event.latLng as google.maps.LatLng); // Add a new marker at the new plotted point on the polyline. new google.maps.Marker({ position: event.latLng, title: "#" + path.getLength(), map: map, }); } declare global { interface Window { initMap: () => void; } } window.initMap = initMap;
JavaScript
// This example creates an interactive map which constructs a polyline based on // user clicks. Note that the polyline only appears once its path property // contains two LatLng coordinates. let poly; let map; function initMap() { map = new google.maps.Map(document.getElementById("map"), { zoom: 7, center: { lat: 41.879, lng: -87.624 }, // Center the map on Chicago, USA. }); poly = new google.maps.Polyline({ strokeColor: "#000000", strokeOpacity: 1.0, strokeWeight: 3, }); poly.setMap(map); // Add a listener for the click event map.addListener("click", addLatLng); } // Handles click events on a map, and adds a new point to the Polyline. function addLatLng(event) { const path = poly.getPath(); // Because path is an MVCArray, we can simply append a new coordinate // and it will automatically appear. path.push(event.latLng); // Add a new marker at the new plotted point on the polyline. new google.maps.Marker({ position: event.latLng, title: "#" + path.getLength(), map: map, }); } window.initMap = initMap;
تجربة عيّنة
تخصيص خط متعدد
يمكنك إضافة صور مستندة إلى متجهات إلى خط متعدّد الأضلاع في شكل رموز. باستخدام
مزيج من الرموز وفئة PolylineOptions
،
يمكنك التحكّم بشكل كبير في مظهر الخطوط المتعددة على خريطتك وأسلوبها.
اطّلِع على الرموز للحصول على معلومات
عن السهام،
الخطوط المنقطة،
الرموز المخصّصة
والرموز المتحركة.
المضلّعات
يمثّل المضلّع منطقة محاطة بمسار مغلق (أو حلقة)، يتم تحديدها
من خلال سلسلة من الإحداثيات.
تتشابه عناصر Polygon
مع عناصر Polyline
من حيث أنّها تتألف من سلسلة من الإحداثيات في تسلسل مرتّب.
يتم رسم المضلّعات باستخدام حدّ وملء. يمكنك تحديد ألوان مخصّصة
ودرجات سماكة وعتامة مخصّصة لحافة المضلع (الخطّ) وألوان
وعتامة مخصّصة للمساحة المُغلقة (الملء). يجب تحديد الألوان
بتنسيق HTML سداسي عشري. لا يمكن استخدام أسماء الألوان.
يمكن أن تصف عناصر Polygon
أشكالًا معقّدة، بما في ذلك:
- مناطق متعددة غير متّصلة يتم تحديدها بواسطة مضلّع واحد
- المناطق التي تحتوي على ثقوب
- تقاطعات منطقة واحدة أو أكثر
لتحديد شكل معقّد، استخدِم مضلّعًا يتضمّن مسارات متعدّدة.
ملاحظة: توفّر طبقة "البيانات" طريقة بسيطة لرسم المضلّعات. وتتولى هذه الأداة إنشاء المضلّعات الملتوية نيابةً عنك، ما يسهّل رسم المضلّعات التي تحتوي على ثقوب. راجِع مستندات "طبقة البيانات".
إضافة مضلّع
بما أنّ المنطقة المضلّعة قد تتضمّن عدة مسارات منفصلة، تحدّد سمة paths
لعنصر
Polygon
مصفوفة من المصفوفات، كلّ منها من النوع MVCArray
. يحدّد كل صفيف
تسلسلًا منفصلاً من إحداثيات LatLng
مرتبة.
بالنسبة إلى المضلّعات البسيطة التي تتألف من مسار واحد فقط، يمكنك
إنشاء Polygon
باستخدام صفيف واحد من
إحداثيات LatLng
. ستحوّل واجهة برمجة التطبيقات JavaScript لـ "خرائط Google"
الصفيف البسيط إلى صفيف من الصفائف عند إنشائه عند تخزينه
ضمن السمة paths
. توفّر واجهة برمجة التطبيقات طريقة بسيطة لتحديد
getPath()
المضلّعات التي تتألف من مسار واحد.
تحدّد سمة editable
للشكل المضلع ما إذا كان بإمكان المستخدمين تعديل
الشكل. اطّلِع على الأشكال القابلة للتعديل من قِبل المستخدم أدناه.
وبالمثل، يمكنك ضبط السمة draggable
للسماح للمستخدمين ب
سحب الشكل.
TypeScript
// This example creates a simple polygon representing the Bermuda Triangle. function initMap(): void { const map = new google.maps.Map( document.getElementById("map") as HTMLElement, { zoom: 5, center: { lat: 24.886, lng: -70.268 }, mapTypeId: "terrain", } ); // Define the LatLng coordinates for the polygon's path. const triangleCoords = [ { lat: 25.774, lng: -80.19 }, { lat: 18.466, lng: -66.118 }, { lat: 32.321, lng: -64.757 }, { lat: 25.774, lng: -80.19 }, ]; // Construct the polygon. const bermudaTriangle = new google.maps.Polygon({ paths: triangleCoords, strokeColor: "#FF0000", strokeOpacity: 0.8, strokeWeight: 2, fillColor: "#FF0000", fillOpacity: 0.35, }); bermudaTriangle.setMap(map); } declare global { interface Window { initMap: () => void; } } window.initMap = initMap;
JavaScript
// This example creates a simple polygon representing the Bermuda Triangle. function initMap() { const map = new google.maps.Map(document.getElementById("map"), { zoom: 5, center: { lat: 24.886, lng: -70.268 }, mapTypeId: "terrain", }); // Define the LatLng coordinates for the polygon's path. const triangleCoords = [ { lat: 25.774, lng: -80.19 }, { lat: 18.466, lng: -66.118 }, { lat: 32.321, lng: -64.757 }, { lat: 25.774, lng: -80.19 }, ]; // Construct the polygon. const bermudaTriangle = new google.maps.Polygon({ paths: triangleCoords, strokeColor: "#FF0000", strokeOpacity: 0.8, strokeWeight: 2, fillColor: "#FF0000", fillOpacity: 0.35, }); bermudaTriangle.setMap(map); } window.initMap = initMap;
تجربة عيّنة
الإكمال التلقائي للمضلّعات
يتألّف Polygon
في المثال أعلاه من أربع مجموعات من إحداثيات
LatLng
، ولكن يُرجى ملاحظة أنّ المجموعة الأولى والمجموعة الأخيرة
تحدّدان الموقع الجغرافي نفسه، ما يُكمل الحلقة. في الممارسة العملية،
بما أنّ المضلّعات تحدّد مناطق مغلقة، ليس عليك تحديد
المجموعة الأخيرة من الإحداثيات. ستكمل واجهة برمجة التطبيقات JavaScript للخرائط تلقائيًا
المضلع من خلال رسم خط يربط الموقع الجغرافي الأخير بالموقع الجغرافي
الأول لأي مسار معيّن.
المثال التالي مطابق للمثال السابق، باستثناء
أنّه تم حذف LatLng
الأخيرة:
عرض المثال.
إزالة مضلّع
لإزالة مضلّع من الخريطة، استخدِم الطريقة setMap()
مع تمرير null
كوسيطة. في المثال التالي،
bermudaTriangle
هو عنصر مضلّع:
bermudaTriangle.setMap(null);
يُرجى العلم أنّ الطريقة أعلاه لا تؤدي إلى حذف المضلع. يؤدي ذلك إلى إزالة
المضلع من الخريطة. إذا أردت بدلاً من ذلك حذف المضلّع،
عليك إزالته من الخريطة، ثم ضبط
المضلّع نفسه على null
.
فحص مضلّع
يحدِّد المضلع سلسلة إحداثياته على أنّها صفيف
من الصفائف، حيث يكون كل صفيف من النوع MVCArray
. كل صفيف
"ورقة" هو صفيف من LatLng
إحداثيات
تحدّد مسارًا واحدًا. لاسترداد هذه الإحداثيات، استدِع الطريقةgetPaths()
لعنصر
Polygon
. بما أنّ صفيف
هو MVCArray
، عليك إجراء تعديلات عليه
وفحصه باستخدام العمليات التالية:
- تعرِض دالة
getAt()
العنصرLatLng
عند قيمة فهرس مستندة إلى الصفر معيّنة. - تُدرج
insertAt()
LatLng
تم تمريرها في قيمة فهرس مستندة إلى الصفر. يُرجى العِلم أنّه يتم نقل أي إحداثيات حالية في قيمة الفهرس هذه إلى الأمام. - تزيل
removeAt()
LatLng
في قيمة فهرس مستندة إلى الصفر معيّنة.
TypeScript
// This example creates a simple polygon representing the Bermuda Triangle. // When the user clicks on the polygon an info window opens, showing // information about the polygon's coordinates. let map: google.maps.Map; let infoWindow: google.maps.InfoWindow; function initMap(): void { map = new google.maps.Map(document.getElementById("map") as HTMLElement, { zoom: 5, center: { lat: 24.886, lng: -70.268 }, mapTypeId: "terrain", }); // Define the LatLng coordinates for the polygon. const triangleCoords: google.maps.LatLngLiteral[] = [ { lat: 25.774, lng: -80.19 }, { lat: 18.466, lng: -66.118 }, { lat: 32.321, lng: -64.757 }, ]; // Construct the polygon. const bermudaTriangle = new google.maps.Polygon({ paths: triangleCoords, strokeColor: "#FF0000", strokeOpacity: 0.8, strokeWeight: 3, fillColor: "#FF0000", fillOpacity: 0.35, }); bermudaTriangle.setMap(map); // Add a listener for the click event. bermudaTriangle.addListener("click", showArrays); infoWindow = new google.maps.InfoWindow(); } function showArrays(event: any) { // Since this polygon has only one path, we can call getPath() to return the // MVCArray of LatLngs. // @ts-ignore const polygon = this as google.maps.Polygon; const vertices = polygon.getPath(); let contentString = "<b>Bermuda Triangle polygon</b><br>" + "Clicked location: <br>" + event.latLng.lat() + "," + event.latLng.lng() + "<br>"; // Iterate over the vertices. for (let i = 0; i < vertices.getLength(); i++) { const xy = vertices.getAt(i); contentString += "<br>" + "Coordinate " + i + ":<br>" + xy.lat() + "," + xy.lng(); } // Replace the info window's content and position. infoWindow.setContent(contentString); infoWindow.setPosition(event.latLng); infoWindow.open(map); } declare global { interface Window { initMap: () => void; } } window.initMap = initMap;
JavaScript
// This example creates a simple polygon representing the Bermuda Triangle. // When the user clicks on the polygon an info window opens, showing // information about the polygon's coordinates. let map; let infoWindow; function initMap() { map = new google.maps.Map(document.getElementById("map"), { zoom: 5, center: { lat: 24.886, lng: -70.268 }, mapTypeId: "terrain", }); // Define the LatLng coordinates for the polygon. const triangleCoords = [ { lat: 25.774, lng: -80.19 }, { lat: 18.466, lng: -66.118 }, { lat: 32.321, lng: -64.757 }, ]; // Construct the polygon. const bermudaTriangle = new google.maps.Polygon({ paths: triangleCoords, strokeColor: "#FF0000", strokeOpacity: 0.8, strokeWeight: 3, fillColor: "#FF0000", fillOpacity: 0.35, }); bermudaTriangle.setMap(map); // Add a listener for the click event. bermudaTriangle.addListener("click", showArrays); infoWindow = new google.maps.InfoWindow(); } function showArrays(event) { // Since this polygon has only one path, we can call getPath() to return the // MVCArray of LatLngs. // @ts-ignore const polygon = this; const vertices = polygon.getPath(); let contentString = "<b>Bermuda Triangle polygon</b><br>" + "Clicked location: <br>" + event.latLng.lat() + "," + event.latLng.lng() + "<br>"; // Iterate over the vertices. for (let i = 0; i < vertices.getLength(); i++) { const xy = vertices.getAt(i); contentString += "<br>" + "Coordinate " + i + ":<br>" + xy.lat() + "," + xy.lng(); } // Replace the info window's content and position. infoWindow.setContent(contentString); infoWindow.setPosition(event.latLng); infoWindow.open(map); } window.initMap = initMap;
تجربة عيّنة
وضع ثقب في مضلّع
لإنشاء منطقة فارغة داخل مضلع، عليك إنشاء مسارَين، أحدهما داخل الآخر. لإنشاء الفتحة، يجب أن تكون الإحداثيات التي تحدِّد المسار الداخلي بالترتيب المقابل لتلك التي تحدِّد المسار الخارجي. على سبيل المثال، إذا كانت إحداثيات المسار الخارجي بترتيب عقارب الساعة، يجب أن يكون المسار الداخلي بترتيب عكس عقارب الساعة.
ملاحظة: تتعامل طبقة "البيانات" مع ترتيب المسارات الداخلية والخارجية نيابةً عنك، ما يسهّل رسم المضلّعات التي تحتوي على ثقوب. راجِع المستندات الخاصة بطبقة البيانات.
يرسم المثال التالي مضلّعًا يتضمّن مسارتَين، مع لفّ المسار الداخلي في الاتجاه المقابل للمسار الخارجي.
TypeScript
// This example creates a triangular polygon with a hole in it. function initMap(): void { const map = new google.maps.Map( document.getElementById("map") as HTMLElement, { zoom: 5, center: { lat: 24.886, lng: -70.268 }, } ); // Define the LatLng coordinates for the polygon's outer path. const outerCoords = [ { lat: 25.774, lng: -80.19 }, { lat: 18.466, lng: -66.118 }, { lat: 32.321, lng: -64.757 }, ]; // Define the LatLng coordinates for the polygon's inner path. // Note that the points forming the inner path are wound in the // opposite direction to those in the outer path, to form the hole. const innerCoords = [ { lat: 28.745, lng: -70.579 }, { lat: 29.57, lng: -67.514 }, { lat: 27.339, lng: -66.668 }, ]; // Construct the polygon, including both paths. const bermudaTriangle = new google.maps.Polygon({ paths: [outerCoords, innerCoords], strokeColor: "#FFC107", strokeOpacity: 0.8, strokeWeight: 2, fillColor: "#FFC107", fillOpacity: 0.35, }); bermudaTriangle.setMap(map); } declare global { interface Window { initMap: () => void; } } window.initMap = initMap;
JavaScript
// This example creates a triangular polygon with a hole in it. function initMap() { const map = new google.maps.Map(document.getElementById("map"), { zoom: 5, center: { lat: 24.886, lng: -70.268 }, }); // Define the LatLng coordinates for the polygon's outer path. const outerCoords = [ { lat: 25.774, lng: -80.19 }, { lat: 18.466, lng: -66.118 }, { lat: 32.321, lng: -64.757 }, ]; // Define the LatLng coordinates for the polygon's inner path. // Note that the points forming the inner path are wound in the // opposite direction to those in the outer path, to form the hole. const innerCoords = [ { lat: 28.745, lng: -70.579 }, { lat: 29.57, lng: -67.514 }, { lat: 27.339, lng: -66.668 }, ]; // Construct the polygon, including both paths. const bermudaTriangle = new google.maps.Polygon({ paths: [outerCoords, innerCoords], strokeColor: "#FFC107", strokeOpacity: 0.8, strokeWeight: 2, fillColor: "#FFC107", fillOpacity: 0.35, }); bermudaTriangle.setMap(map); } window.initMap = initMap;
تجربة عيّنة
المستطيلات
بالإضافة إلى فئة Polygon
العامة، تتضمّن واجهة برمجة التطبيقات
JavaScript API في "خرائط Google" فئة محدّدة لكائنات
Rectangle
، وذلك لتبسيط عملية إنشائها.
إضافة مستطيل
يشبه العنصر Rectangle
العنصر Polygon
في
أنّه يمكنك تحديد ألوان ودرجات سماكة وعتمات مخصّصة لحافة المستطيل (الخط) وألوان وعتمات مخصّصة للمساحة داخل المستطيل (الملء). يجب الإشارة إلى الألوان بتنسيق HTML
الرقمي السداسي العشري.
على عكس Polygon
، لا يتم تحديد paths
لعنصر Rectangle
. بدلاً من ذلك، يحتوي المستطيل على سمة bounds
التي تحدّد شكله من خلال تحديد
google.maps.LatLngBounds
للمستطيل.
تحدّد سمة editable
للمستطيل ما إذا كان
بإمكان المستخدمين تعديل الشكل. اطّلِع على أشكال
القابلة للتعديل من قِبل المستخدم أدناه. وبالمثل، يمكنك ضبط سمة draggable
للسماح للمستخدمين بجرّ المستطيل.
TypeScript
// This example adds a red rectangle to a map. function initMap(): void { const map = new google.maps.Map( document.getElementById("map") as HTMLElement, { zoom: 11, center: { lat: 33.678, lng: -116.243 }, mapTypeId: "terrain", } ); const rectangle = new google.maps.Rectangle({ strokeColor: "#FF0000", strokeOpacity: 0.8, strokeWeight: 2, fillColor: "#FF0000", fillOpacity: 0.35, map, bounds: { north: 33.685, south: 33.671, east: -116.234, west: -116.251, }, }); } declare global { interface Window { initMap: () => void; } } window.initMap = initMap;
JavaScript
// This example adds a red rectangle to a map. function initMap() { const map = new google.maps.Map(document.getElementById("map"), { zoom: 11, center: { lat: 33.678, lng: -116.243 }, mapTypeId: "terrain", }); const rectangle = new google.maps.Rectangle({ strokeColor: "#FF0000", strokeOpacity: 0.8, strokeWeight: 2, fillColor: "#FF0000", fillOpacity: 0.35, map, bounds: { north: 33.685, south: 33.671, east: -116.234, west: -116.251, }, }); } window.initMap = initMap;
تجربة عيّنة
تنشئ التعليمة البرمجية التالية مستطيلاً في كل مرة يغيّر فيها المستخدم مستوى التكبير/التصغير على الخريطة. يتم تحديد حجم المستطيل من خلال إطار العرض.
TypeScript
// This example creates a rectangle based on the viewport // on any 'zoom-changed' event. function initMap(): void { const map = new google.maps.Map( document.getElementById("map") as HTMLElement, { zoom: 11, center: { lat: 40.74852, lng: -73.981687 }, mapTypeId: "terrain", } ); const rectangle = new google.maps.Rectangle(); map.addListener("zoom_changed", () => { // Get the current bounds, which reflect the bounds before the zoom. rectangle.setOptions({ strokeColor: "#FF0000", strokeOpacity: 0.8, strokeWeight: 2, fillColor: "#FF0000", fillOpacity: 0.35, map, bounds: map.getBounds() as google.maps.LatLngBounds, }); }); } declare global { interface Window { initMap: () => void; } } window.initMap = initMap;
JavaScript
// This example creates a rectangle based on the viewport // on any 'zoom-changed' event. function initMap() { const map = new google.maps.Map(document.getElementById("map"), { zoom: 11, center: { lat: 40.74852, lng: -73.981687 }, mapTypeId: "terrain", }); const rectangle = new google.maps.Rectangle(); map.addListener("zoom_changed", () => { // Get the current bounds, which reflect the bounds before the zoom. rectangle.setOptions({ strokeColor: "#FF0000", strokeOpacity: 0.8, strokeWeight: 2, fillColor: "#FF0000", fillOpacity: 0.35, map, bounds: map.getBounds(), }); }); } window.initMap = initMap;
تجربة عيّنة
إزالة مستطيل
لإزالة مستطيل من الخريطة، استخدِم طريقة setMap()
مع تمرير null
كوسيطة.
rectangle.setMap(null);
يُرجى العلم أنّ الطريقة أعلاه لا تؤدي إلى حذف المستطيل. يؤدي ذلك إلى إزالة
المستطيل من الخريطة. إذا أردت بدلاً من ذلك حذف المستطيل،
عليك إزالته من الخريطة، ثم ضبط
المستطيل نفسه على null
.
دوائر
بالإضافة إلى فئة Polygon
العامة، تتضمّن واجهة برمجة التطبيقات
JavaScript API في "خرائط Google" فئة محدّدة لكائنات
Circle
، وذلك لتبسيط عملية إنشائها.
إضافة دائرة
يشبه الرمز Circle
الرمز Polygon
من حيث أنّه يمكنك
تحديد ألوان ودرجات سماكة وعتمات مخصّصة لحافة الدائرة (المخطّط) وألوان وعتمات مخصّصة للمساحة داخل الدائرة (الملء). يجب الإشارة إلى الألوان بأسلوب HTML الرقمي السداسي العشري.
على عكس Polygon
، لا يتم تحديد paths
لعنصر Circle
. بدلاً من ذلك، تحتوي الدائرة على سمتَين إضافيتَين
تحدّدان شكلها:
center
تحدّدgoogle.maps.LatLng
مركز الدائرة.radius
تحدّد نصف قطر الدائرة، بالكيلومترات.
تحدّد سمة editable
للدائرة ما إذا كان بإمكان المستخدمين تعديل
الشكل. اطّلِع على الأشكال القابلة للتعديل من قِبل المستخدم أدناه.
وبالمثل، يمكنك ضبط سمة draggable
للسماح
للمستخدمين بجرّ الدائرة.
TypeScript
// This example creates circles on the map, representing populations in North // America. // First, create an object containing LatLng and population for each city. interface City { center: google.maps.LatLngLiteral; population: number; } const citymap: Record<string, City> = { chicago: { center: { lat: 41.878, lng: -87.629 }, population: 2714856, }, newyork: { center: { lat: 40.714, lng: -74.005 }, population: 8405837, }, losangeles: { center: { lat: 34.052, lng: -118.243 }, population: 3857799, }, vancouver: { center: { lat: 49.25, lng: -123.1 }, population: 603502, }, }; function initMap(): void { // Create the map. const map = new google.maps.Map( document.getElementById("map") as HTMLElement, { zoom: 4, center: { lat: 37.09, lng: -95.712 }, mapTypeId: "terrain", } ); // Construct the circle for each value in citymap. // Note: We scale the area of the circle based on the population. for (const city in citymap) { // Add the circle for this city to the map. const cityCircle = new google.maps.Circle({ strokeColor: "#FF0000", strokeOpacity: 0.8, strokeWeight: 2, fillColor: "#FF0000", fillOpacity: 0.35, map, center: citymap[city].center, radius: Math.sqrt(citymap[city].population) * 100, }); } } declare global { interface Window { initMap: () => void; } } window.initMap = initMap;
JavaScript
const citymap = { chicago: { center: { lat: 41.878, lng: -87.629 }, population: 2714856, }, newyork: { center: { lat: 40.714, lng: -74.005 }, population: 8405837, }, losangeles: { center: { lat: 34.052, lng: -118.243 }, population: 3857799, }, vancouver: { center: { lat: 49.25, lng: -123.1 }, population: 603502, }, }; function initMap() { // Create the map. const map = new google.maps.Map(document.getElementById("map"), { zoom: 4, center: { lat: 37.09, lng: -95.712 }, mapTypeId: "terrain", }); // Construct the circle for each value in citymap. // Note: We scale the area of the circle based on the population. for (const city in citymap) { // Add the circle for this city to the map. const cityCircle = new google.maps.Circle({ strokeColor: "#FF0000", strokeOpacity: 0.8, strokeWeight: 2, fillColor: "#FF0000", fillOpacity: 0.35, map, center: citymap[city].center, radius: Math.sqrt(citymap[city].population) * 100, }); } } window.initMap = initMap;
تجربة عيّنة
إزالة دائرة
لإزالة دائرة من الخريطة، استخدِم طريقة setMap()
مع تمرير null
كوسيطة.
circle.setMap(null);
يُرجى العلم أنّ الطريقة أعلاه لا تؤدي إلى حذف الدائرة. يؤدي ذلك إلى إزالة
الدائرة من الخريطة. إذا أردت بدلاً من ذلك حذف الدائرة،
عليك إزالتها من الخريطة، ثم ضبط
الدائرة نفسها على null
.
أشكال قابلة للتعديل والسحب من قِبل المستخدم
يؤدي جعل الشكل قابلاً للتعديل إلى إضافة مقابض إليه، ويمكن للمستخدمين استخدامها لإعادة وضع الشكل وإعادة تشكيله وتغيير حجمه مباشرةً على الخريطة. يمكنك أيضًا جعل الشكل قابلاً للسحب، حتى يتمكّن المستخدمون من نقله إلى مكان مختلف على الخريطة.
لا تبقى التغييرات التي يجريها المستخدم على العنصر محفوظة بين الجلسات. إذا أردت حفظ تعديلات المستخدم، عليك تسجيل المعلومات وتخزينها بنفسك.
إتاحة تعديل شكل
يمكن ضبط أي شكل (الخطوط المتعددة والمضلّعات والدائرات والمستطيلات)
على أنّه قابل للتعديل من قِبل المستخدم، وذلك من خلال ضبط editable
على true
في
خيارات الشكل.
var bounds = { north: 44.599, south: 44.490, east: -78.443, west: -78.649 }; // Define a rectangle and set its editable property to true. var rectangle = new google.maps.Rectangle({ bounds: bounds, editable: true });
جعل شكل قابل للسحب
بشكلٍ تلقائي، سيتم تثبيت الشكل المرسوم على الخريطة في موضعه. للسماح
للمستخدمين بسحب شكل إلى موقع مختلف على الخريطة، اضبط
draggable
على true
في خيارات الشكل.
var redCoords = [ {lat: 25.774, lng: -80.190}, {lat: 18.466, lng: -66.118}, {lat: 32.321, lng: -64.757} ]; // Construct a draggable red triangle with geodesic set to true. new google.maps.Polygon({ map: map, paths: redCoords, strokeColor: '#FF0000', strokeOpacity: 0.8, strokeWeight: 2, fillColor: '#FF0000', fillOpacity: 0.35, draggable: true, geodesic: true });
عند تفعيل السحب على شكل مضلّع أو خط متعدد، يجب أيضًا مراعاة
جعل الشكل المضلّع أو الخط المتعدّد خطوطًا جغرافية، وذلك من خلال ضبط الخاصية geodesic
على true
.
سيحتفظ المضلع الجيوديزِي بشكله الجغرافي الحقيقي عند نقله، مما يؤدي إلى ظهور المضلع مشوّهًا عند نقله شمالًا أو جنوبًا في إسقاط Mercator. ستحتفظ المضلّعات غير الجيوديسية دائمًا بمظهرها الأولي على الشاشة.
في الخطوط المتعددة الجيوديسية، يتم رسم أقسام الخطوط المتعددة على أنّها أقصر مسار بين نقطتَين على سطح الأرض، بافتراض أنّ الأرض هي كرة، على عكس الخطوط المستقيمة في إسقاط Mercator.
لمزيد من المعلومات عن أنظمة الإحداثيات، يمكنك الرجوع إلى دليل إحداثيات الخريطة وشريحة الخريطة.
تعرض الخريطة التالية مثلثَين بالحجم والقياسات نفسها تقريبًا. تم ضبط سمة geodesic
للمثلث الأحمر على
true
. لاحِظ كيف يتغيّر شكله أثناء تحرّكه شمالًا.
الاستماع إلى أحداث التعديل
عند تعديل شكل، يتم تشغيل حدث عند اكتمال التعديل. تم إدراج هذه الأحداث أدناه.
شكل | الفعاليات |
---|---|
دائرة |
radius_changed center_changed
|
مضلّع |
insert_at remove_at set_at
يجب ضبط المستمع على مسار المضلع. إذا كان المضلع يحتوي على مسارات متعدّدة، يجب ضبط مستمع على كل مسار. |
خط متعدد |
insert_at remove_at set_at
يجب ضبط المستمع على مسار الخط المتعدّد. |
مستطيل | bounds_changed |
في ما يلي بعض مقتطفات الرموز البرمجية المفيدة:
google.maps.event.addListener(circle, 'radius_changed', function() { console.log(circle.getRadius()); }); google.maps.event.addListener(outerPath, 'set_at', function() { console.log('Vertex moved on outer path.'); }); google.maps.event.addListener(innerPath, 'insert_at', function() { console.log('Vertex removed from inner path.'); }); google.maps.event.addListener(rectangle, 'bounds_changed', function() { console.log('Bounds changed.'); });
اطّلِع على مثال على معالجة حدث تعديل على مستطيل: عرض مثال.
الاستماع إلى أحداث السحب
عند سحب شكل، يتم تشغيل الأحداث عند بدء عملية السحب وانتهائها، وكذلك أثناء عملية السحب. يتم تشغيل الأحداث التالية لأشكال الخطوط المتعددة والأشكال المتعددة والدوائر والمستطيلات.
الحدث | الوصف |
---|---|
dragstart |
يتم تشغيله عندما يبدأ المستخدم سحب الشكل. |
drag |
يتم تشغيله بشكل متكرّر أثناء سحب المستخدِم للشكل. |
dragend |
يتم تشغيله عندما يتوقف المستخدم عن سحب الشكل. |
لمزيد من المعلومات عن معالجة الأحداث، اطّلِع على مستندات الأحداث.