لم يعُد الإصدار 2 من JavaScript JavaScript API متاحًا اعتبارًا من 26 أيار (مايو) 2021. ونتيجةً لذلك، ستتوقف خرائط الموقع الإلكتروني عن العمل بموجب الإصدار 2، وستعرض أخطاء JavaScript. للاستمرار في استخدام الخرائط على موقعك الإلكتروني، عليك نقل البيانات إلى
الإصدار 3 من واجهة برمجة تطبيقات JavaScript للخرائط. سيساعدك هذا الدليل
في هذه العملية.
نظرة عامة
سيكون لكل تطبيق عملية نقل بيانات مختلفة قليلاً،
ولكن هناك بعض الخطوات الشائعة في جميع المشاريع:
- الحصول على مفتاح جديد: تستخدم واجهة برمجة تطبيقات JavaScript للخرائط
Google Cloud Console لإدارة المفاتيح. إذا كنت لا تزال تستخدم مفتاح الإصدار 2، احرص على الحصول على
مفتاح واجهة برمجة التطبيقات الجديد قبل بدء عملية نقل البيانات.
- عدِّل واجهة برمجة التطبيقات. ستُحمِّل معظم التطبيقات
الإصدار 3 من JavaScript JavaScript API بالرموز التالية:
<script src="//maps.googleapis.com/maps/api/js?key=YOUR_API_KEY"></script>
- عدِّل الرمز. سيعتمد مقدار التغيير المطلوب بشكل كبير على طلبك. تشمل التغييرات الشائعة ما يلي:
- احرص دائمًا على الإشارة إلى مساحة اسم google.maps. في الإصدار 3، يتم تخزين رمز واجهة برمجة تطبيقات JavaScript للخرائط بالكامل في مساحة الاسم
google.maps.*
بدلاً من مساحة الاسم العالمية. تمت أيضًا إعادة تسمية معظم العناصر كجزء من هذه العملية. على سبيل المثال، بدلاً من تحميل GMap2
، يمكنك الآن تحميل google.maps.Map
.
- إزالة أي إشارات إلى الطرق القديمة: تمّت إزالة عدد من
طرق الأغراض العامة، مثل
GDownloadURL
وGLog
.
ويمكنك استبدال هذه الوظيفة بمكتبات الخدمات التابعة لجهة خارجية أو إزالة هذه المراجع من الرمز.
- (اختياري) أضِف المكتبات إلى الرمز. تم تخصيص العديد من الميزات في مكتبات المرافق الخارجية بحيث لا يحتاج كل تطبيق سوى إلى تحميل أجزاء واجهة برمجة التطبيقات التي سيتم استخدامها.
- (اختياري) يمكنك ضبط مشروعك لاستخدام الإصدارات الخارجية من الإصدار 3.
يمكن استخدام نماذج v3 الخارجية للمساعدة في التحقّق من صحة الرمز من خلال مغلِق
الإغلاق أو تشغيل الإكمال التلقائي في IDE.
مزيد من المعلومات حول
التجميع المتقدّم والمشتقات الخارجية
- الاختبار والتكرار: في هذه المرحلة، سيظلّ عليك
تنفيذ بعض الإجراءات، ولكن يُعدّ ذلك مفيدًا لأنّك في طريقك
إلى تطبيق الخرائط الجديد الذي يتضمّن الإصدار 3.
التغييرات في الإصدار 3 من Maps API API
قبل التخطيط لعملية نقل البيانات، عليك تخصيص بعض الوقت لفهم الاختلافات بين الإصدار 2 من واجهة برمجة تطبيقات JavaScript للخرائط والإصدار 3 من JavaScript JavaScript. تمت كتابة أحدث نسخة من واجهة برمجة تطبيقات JavaScript للخرائط
من البداية، مع التركيز على تقنيات برمجة
JavaScript الحديثة، والاستخدام المتزايد للمكتبات وواجهة برمجة تطبيقات مبسّطة.
وقد تمت إضافة العديد من الميزات الجديدة إلى واجهة برمجة التطبيقات، وقد تم تغيير العديد من الميزات المألوفة أو حتى إزالتها. ويلقي هذا القسم الضوء على بعض الاختلافات الرئيسية بين الإصدارين.
تشمل بعض التغييرات في الإصدار 3 من واجهة برمجة التطبيقات ما يلي:
- مكتبة أساسية مبسّطة. تم نقل العديد من الدوال التكميلية إلى المكتبات، ما يساعد على خفض أوقات التحميل وتحليل واجهة برمجة التطبيقات الأساسية، ما يتيح تحميل الخريطة بسرعة على أي جهاز.
- تم تحسين أداء عدة ميزات، مثل عرض المضلّع ووضع
العلامة.
- نهج جديد
لحدود الاستخدام من جهة العميل لاستيعاب العناوين المشتركة التي تستخدمها الخوادم الوكيلة للأجهزة الجوّالة والجدران النارية للشركات بشكل أفضل.
- تمت إضافة دعم العديد من المتصفحات الحديثة ومتصفّحات الأجهزة الجوّالة. تم إيقاف دعم Internet Explorer 6.
- تمت إزالة العديد من فئات المساعدات ذات الأغراض العامة (
GLog
أو
GDownloadUrl
). وتتوفّر حاليًا العديد من
مكتبات JavaScript الممتازة التي توفّر وظائف مشابهة،
مثل Clusure أو
jQuery.
- تنفيذ عرض التجوّل الافتراضي HTML5 الذي سيتم تحميله على أي جهاز جوّال.
- صور
مخصّصة في "التجوّل الافتراضي" مع صورك الخاصة، تتيح لك مشاركة
الصور البانورامية لمنحدرات التزلج أو المنازل المعروضة للبيع أو الأماكن الأخرى المثيرة للاهتمام.
- عمليات تخصيص الخرائط ذات الأنماط التي تسمح لك بتغيير عرض العناصر على الخريطة الأساسية لتطابق نمطك المرئي الفريد.
- التوافق مع العديد من الخدمات الجديدة، مثل
ElevationService
وDISTANCE
Matrix
- توفّر خدمات الاتجاهات المحسّنة مسارات بديلة وتحسين
المسارات (حلول بحلول
مشكلة موظّف المبيعات المتنقلة)، واتجاهات ركوب الدراجات (باستخدام
طبقة ركوب الدراجات)، واتجاهات النقل العام،
و
الاتجاهات القابلة للسحب.
- هو تنسيق محدّث للترميز الجغرافي يوفّر معلومات
type أكثر دقة
من القيمة
accuracy
من الإصدار 2 من واجهة برمجة التطبيقات لترميز المواقع الجغرافية.
- إتاحة عدة
معلومات
لنظام التشغيل Windows على خريطة واحدة
مفتاحك الجديد
يستخدم الإصدار 3 من واجهة برمجة تطبيقات JavaScript للخرائط نظام مفتاح جديدًا من الإصدار 2. من المحتمل أنك تستخدم
مفتاح v3 مع تطبيقك، وفي هذه الحالة لا حاجة إلى إجراء أي تغيير. للتحقق من ذلك، تحقّق من عنوان URL الذي تحمِّل منه واجهة برمجة تطبيقات JavaScript ل"خرائط Google" للمعلّمة key
. إذا كانت قيمة المفتاح تبدأ بـ 'ABQIAA'، يعني ذلك أنك تستخدم مفتاح v2. إذا كان لديك مفتاح V2، يجب الترقية إلى مفتاح v3 كجزء من عملية نقل البيانات، والذي سيؤدي إلى:
يتم تمرير المفتاح عند تحميل الإصدار 3 من واجهة برمجة تطبيقات JavaScript للخرائط.
مزيد من المعلومات حول إنشاء مفاتيح واجهة برمجة التطبيقات
لاحِظ أنه إذا كنت أحد عملاء Google Maps API for Work، قد تكون تستخدم معرِّف عميل مع المعلَمة client
بدلاً من استخدام المعلَمة key
. لا تزال معرّفات العملاء متاحة في الإصدار 3 من JavaScript JavaScript API ولا تحتاج إلى إجراء عملية الترقية الرئيسية.
تحميل واجهة برمجة التطبيقات
يتضمّن التعديل الأول الذي عليك تنفيذه على الرمز كيفية تحميل واجهة برمجة التطبيقات. في الإصدار 2، يمكنك تحميل واجهة برمجة تطبيقات JavaScript للخرائط
من خلال طلب إلى
http://maps.google.com/maps
. إذا كنت بصدد تحميل الإصدار 3 من واجهة برمجة تطبيقات JavaScript للخرائط، عليك إجراء التغييرات التالية:
- تحميل واجهة برمجة التطبيقات من
//maps.googleapis.com/maps/api/js
- أزِل المعلَمة
file
.
- تعديل المعلَمة
key
باستخدام
مفتاح الإصدار 3 الجديد. يجب أن يستخدم عملاء Google Maps API for Work
المَعلمة client
.
- (الخطة المميزة في "منصة خرائط Google" فقط) تأكّد من
توفير المعلَمة
client
على النحو
الموضّح في
دليل مطوّري برامج الخطة المميّزة في "منصة خرائط Google".
- أزِل المعلَمة
v
لطلب أحدث نسخة تم إصدارها أو غيِّر قيمتها وفقًا للمخطط الإصدار 3.
- (اختياري) استبدِل المعلّمة
hl
بالسمة language
واحتفِظ قيمتها.
- (اختياري) أضِف معلَمة
libraries
لتحميل المكتبات الاختيارية.
في أبسط الحالات، لن يحدّد بدء التشغيل باستخدام الإصدار 3 من سوى معلمة مفتاح واجهة برمجة التطبيقات فقط:
<script src="//maps.googleapis.com/maps/api/js?key=YOUR_API_KEY"></script>
يطلب المثال التالي أحدث إصدار من الإصدار الثاني من واجهة برمجة تطبيقات JavaScript للخرائط باللغة الألمانية:
<script src="//maps.google.com/maps?file=api&v=2.x&key=YOUR_API_KEY&hl=de"></script>
المثال التالي هو طلب مكافئ للإصدار 3.
<script src="//maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&language=de"></script>
تقديم مساحة الاسم google.maps
من المحتمل أن التغيير الأكثر وضوحًا في الإصدار 3 من واجهة برمجة تطبيقات JavaScript للخرائط هو
إضافة مساحة الاسم google.maps
. تعرض واجهة برمجة التطبيقات للإصدار 2
كل العناصر في مساحة الاسم العامة تلقائيًا، ما قد يؤدي إلى تسمية
تعارضات. ضمن الإصدار 3، يتم وضع جميع العناصر ضمن مساحة الاسم google.maps
.
عند نقل بيانات تطبيقك إلى الإصدار 3، عليك تغيير الرمز
للاستفادة من مساحة الاسم الجديدة. للأسف، لن يعمل البحث عن &"G" واستبدالها بـ "google;maps.google&";#39;t;;33;;33;;9، لكن يُفضّل تطبيقها عند مراجعة الرمز، في ما يلي بعض الأمثلة
على الفئات المكافئة في الإصدارَين v2 وv3.
الإصدار 2 |
الإصدار 3 |
GMap2 |
google.maps.Map |
GLatLng |
google.maps.LatLng |
GInfoWindow |
google.maps.InfoWindow |
GMapOptions |
google.map.MapOptions |
G_API_VERSION |
google.maps.version |
GPolyStyleOptions |
google.maps.PolygonOptions or
google.maps.PolylineOptions |
إزالة الرمز القديم
يحتوي الإصدار 3 من JavaScript JavaScript API على وظائف مشابهة لمعظم الوظائف في الإصدار 2، ولكن هناك بعض الفئات التي لم تعد
متاحة. وكجزء من عملية نقل البيانات، يجب استبدال هذه الصفوف بمكتبات خدمات تابعة لجهات خارجية أو إزالة هذه المراجع من الرمز. تتوفّر العديد من مكتبات JavaScript الممتازة التي توفّر وظائف مشابهة، مثل Closure أو jQuery.
لا تحتوي الفئات التالية على محتوى متوازٍ في الإصدار 3 من JavaScript JavaScript API:
GBounds | GLanguage |
GBrowserIsCompatible | GLayer |
GControl | GLog |
GControlAnchor | GMercatorProjection |
GControlImpl | GNavLabelControl |
GControlPosition | GObliqueMercator |
GCopyright | GOverlay |
GCopyrightCollection | GPhotoSpec |
GDownloadUrl | GPolyEditingOptions |
GDraggableObject | GScreenOverlay |
GDraggableObjectOptions | GStreetviewFeatures |
GFactualGeocodeCache | GStreetviewLocation |
GGeoAddressAccuracy | GStreetviewOverlay |
GGeocodeCache | GStreetviewUserPhotosOptions |
GGoogleBar | GTileLayerOptions |
GGoogleBarAdsOptions | GTileLayerOverlayOptions |
GGoogleBarLinkTarget | GTrafficOverlayOptions |
GGoogleBarListingTypes | GUnload |
GGoogleBarOptions | GXml |
GGoogleBarResultList | GXmlHttp |
GInfoWindowTab | GXslt |
GKeyboardHandler |
|
رمز المقارنة
لنقارن بين تطبيقَين تمت كتابةهما باستخدام الإصدارَين 2 وواجهات برمجة التطبيقات V3.
<!DOCTYPE html>
<html>
<head>
<script src="//maps.google.com/maps?file=api&v=2&key=YOUR_API_KEY"></script>
<style>
html, body, #map { height: 100%; margin: 0; }
</style>
<script>
function initialize() {
if (GBrowserIsCompatible()) {
var map = new GMap2(
document.getElementById('map'));
map.setCenter(new GLatLng(37.4419, -122.1419), 13);
map.setUIToDefault();
map.addOverlay(new GMarker(new GLatLng(37.4419, -122.1419)));
}
}
</script>
</head>
<body onload="initialize()" onunload="GUnload()">
<div id="map"></div>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<script src="//maps.googleapis.com/maps/api/js?key=YOUR_API_KEY"></script>
<style>
html, body, #map { height: 100%; margin: 0; }
</style>
<script>
function initialize() {
var map = new google.maps.Map(
document.getElementById('map'), {
center: new google.maps.LatLng(37.4419, -122.1419),
zoom: 13,
mapTypeId: google.maps.MapTypeId.ROADMAP
});
var marker = new google.maps.Marker({
position: new google.maps.LatLng(37.4419, -122.1419),
map: map
});
}
google.maps.event.addDomListener(window, 'load', initialize);
</script>
</head>
<body>
<div id="map"></div>
</body>
</html>
كما تلاحظ، هناك عدة اختلافات بين التطبيقَين. تشمل التغييرات البارزة ما يلي:
- تم تغيير العنوان الذي تم تحميل واجهة برمجة التطبيقات منه.
- لم تعد الطريقة
GBrowserIsCompatible()
وGUnload()
مطلوبة في الإصدار 3، وتمت إزالتها من واجهة برمجة التطبيقات.
- يتم استبدال الكائن
GMap2
بالعنصر google.maps.Map
في واجهة برمجة التطبيقات.
- يتم الآن تحميل المواقع من خلال فئات الخيارات. في المثال أعلاه، نحدّد السمات الثلاث المطلوبة لتحميل خريطة،
center
وzoom
وmapTypeId
، من خلال عنصر MapOptions
مضمّن.
- يتم تفعيل واجهة المستخدم التلقائية بشكل تلقائي في الإصدار 3. ويمكنك إيقاف ذلك من خلال ضبط السمة
disableDefaultUI
على "صحيح" في الكائن MapOptions
.
ملخّص
في هذه المرحلة، ستحصل على فكرة عن بعض النقاط الرئيسية
المرتبطة بعملية نقل البيانات من الإصدار v2 إلى الإصدار 3 من Maps API في Google Maps.
هناك المزيد من المعلومات التي قد تحتاج إلى معرفتها، ولكن سيعتمد ذلك على طلبك. في الأقسام التالية، تم إدراج تعليمات نقل البيانات
لحالات معيّنة قد تواجهها. إضافةً إلى ذلك، هناك عدة مراجع
قد تكون مفيدة لك أثناء عملية الترقية.
إذا كان لديك أي مشاكل أو لديك أسئلة حول هذه المقالة، يُرجى استخدام
الرابط إرسال ملاحظات في أعلى هذه الصفحة.
يقدّم هذا القسم مقارنة مفصّلة بين أكثر الميزات رواجًا في
الإصدارَين 2 و3 من Google Maps API API. تم تصميم كل قسم من المرجع لقراءته بشكل فردي. وننصحك
بعدم قراءة هذا المرجع بالكامل، بل استخدِم هذه المادة
لمساعدتك في نقل البيانات في كل حالة على حدة.
- الأحداث: تسجيل الأحداث ومعالجتها.
- عناصر التحكّم: معالجة عناصر التحكّم في التنقّل التي تظهر على الخريطة.
- تراكبات - إضافة العناصر وتعديلها على الخريطة.
- أنواع الخرائط: العناصر التي تشكّل الخريطة الأساسية.
- الطبقات - إضافة محتوى وتعديله كمجموعة، مثل KML أو طبقات الزيارات.
- الخدمات - استخدام الترميز الجغرافي أو الاتجاهات أو خدمات "التجوّل الافتراضي" من Google
الأحداث
نموذج الحدث في الإصدار 3 من JavaScript JavaScript API مشابه للنموذج المستخدَم في الإصدار 2،
على الرغم من تغيّر الكثير من المعلومات ضمن التفاصيل.
حدث جديد لدعم MVC
تضيف واجهة برمجة التطبيقات v3 نوعًا جديدًا من الأحداث لتعكس تغييرات حالة MVC. ويتوفّر الآن نوعان من الفعاليات:
- يتم نشر أحداث المستخدم (مثل أحداث "click"الماوس) من
DOM إلى واجهة برمجة تطبيقات JavaScript للخرائط. وهذه الفعاليات منفصلة عن أحداث DOM العادية.
- تعكس إشعارات تغيير حالة MVC التغييرات في كائنات API للخرائط
وتتم تسميتها باستخدام اصطلاح
property_changed
.
يُصدِّر كل كائن API API في "خرائط Google" عددًا من الأحداث المُعنونة. يجب أن تسجّل التطبيقات المهتمة بفعاليات معيّنة
أدوات معالجة الأحداث الخاصة بهذه الأحداث وأن تنفّذ الرمز عند تلقّي تلك الأحداث. هذه
الآلية المستندة إلى الأحداث هي نفسها في كل من
الإصدار 2 و3 من واجهة برمجة تطبيقات JavaScript JavaScript، باستثناء أنّ مساحة الاسم قد تم تغييرها من GEvent
إلى
google.maps.event
:
GEvent.addListener(map, 'click', function() {
alert('You clicked the map.');
});
google.maps.event.addListener(map, 'click', function() {
alert('You clicked the map.');
});
إزالة أدوات معالجة الأحداث
ولأسباب تتعلق بالأداء، من الأفضل إزالة المستمع إلى الحدث عندما لا يكون هناك حاجة إليه. تعمل إزالة أداة معالجة الحدث بالطريقة نفسها في الإصدارين 2 و
3:
- عند إنشاء أداة معالجة حدث، يتم عرض كائن غير شفاف (GEventListener
في الإصدار 2، MapsEventListener
في الإصدار 3).
- إذا أردت إزالة أداة الاستماع إلى الحدث، عليك تمرير هذا العنصر إلى
الطريقة
removeListener()
(GEvent.removeListener()
في الإصدار 2 أو google.maps.event.removeListener()
في الإصدار 3) لإزالة
أداة الاستماع.
الاستماع إلى أحداث DOM
إذا أردت التقاط أحداث DOM (نموذج كائن المستند)
والرد عليها، يوفر الإصدار 3 طريقة
google.maps.event.addDomListener()
الثابتة، والتي تعادل طريقة GEvent.addDomListener()
في الإصدار 2.
استخدام الوسيطات التي تم تجاوزها في الأحداث
غالبًا ما تجتاز أحداث واجهة المستخدم وسيطة الحدث التي يمكن الوصول إليها بعد ذلك من خلال
أداة معالجة الحدث. تم تبسيط معظم وسيطات الأحداث في الإصدار 3 لتكون أكثر اتساقًا مع العناصر في واجهة برمجة التطبيقات. (راجِع
مرجع v3
لمعرفة التفاصيل.)
ما من وسيطة overlay
في المستمعين الذين يستخدمون الإصدار 3 من الحدث. إذا سجّلت حدث click
على خريطة الإصدار 3، لن تتم معاودة الاتصال
إلا عندما ينقر المستخدم على الخريطة الأساسية. ويمكنك تسجيل استدعاءات إضافية
على التراكبات القابلة للنقر إذا كنت بحاجة إلى التفاعل مع تلك النقرات.
// Passes an overlay argument when clicking on a map
var map = new GMap2(document.getElementById('map'));
map.setCenter(new GLatLng(-25.363882, 131.044922), 4);
map.setUIToDefault();
GEvent.addListener(map,'click', function(overlay, latlng) {
if (latlng) {
var marker = new GMarker(latlng);
map.addOverlay(marker);
}
});
// Passes only an event argument
var myOptions = {
center: new google.maps.LatLng(-25.363882, 131.044922),
zoom: 4,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
var map = new google.maps.Map(document.getElementById('map'),
myOptions);
google.maps.event.addListener(map, 'click', function(event) {
var marker = new google.maps.Marker({
position: event.latLng,
map: map
});
});
عناصر التحكّم
تعرض واجهة برمجة تطبيقات JavaScript للخرائط عناصر تحكم في واجهة المستخدم تسمح للمستخدمين بالتفاعل مع خريطتك. ويمكنك استخدام واجهة برمجة التطبيقات لتخصيص طريقة ظهور عناصر التحكّم هذه.
التغييرات في أنواع التحكّم
تم إجراء بعض التغييرات على أنواع control
باستخدام
الإصدار 3 من واجهة برمجة التطبيقات.
- تتوافق واجهة برمجة التطبيقات الإصدار 3 مع أنواع الخرائط الإضافية، بما في ذلك خرائط التضاريس وإمكانية إضافة أنواع خرائط مخصّصة.
- لم يعد عنصر التحكّم الهرمي،
GHierarchicalMapTypeControl
، متاحًا.
يمكنك تحقيق تأثير مشابه باستخدام
عنصر التحكّم google.maps.MapTypeControlStyle.HORIZONTAL_BAR
.
- إنّ التنسيق الأفقي الذي يوفّره الإصدار
GMapTypeControl
في الإصدار 2 غير متاح في الإصدار 3.
إضافة عناصر تحكم إلى الخريطة
باستخدام الإصدار 2 من واجهة برمجة تطبيقات JavaScript للخرائط، يمكنك إضافة عناصر تحكّم إلى
خريطتك من خلال طريقة addControl()
لكائن الخريطة. في الإصدار 3، بدلاً من الوصول إلى عناصر التحكّم أو تعديلها مباشرةً،
يمكنك تعديل عنصر MapOptions
المرتبط. يوضّح
النموذج التالي كيفية تخصيص الخريطة لإضافة عناصر التحكّم
التالية:
- الأزرار التي تتيح للمستخدم التبديل بين أنواع الخرائط المتوفرة
- مقياس على الخريطة
var map = new GMap2(document.getElementById('map'));
map.setCenter(new GLatLng(-25.363882, 131.044922), 4);
// Add controls
map.addControl(new GMapTypeControl());
map.addControl(new GScaleControl());
var myOptions = {
center: new google.maps.LatLng(-25.363882, 131.044922),
zoom: 4,
mapTypeId: google.maps.MapTypeId.ROADMAP,
// Add controls
mapTypeControl: true,
scaleControl: true
};
var map = new google.maps.Map(document.getElementById('map'),
myOptions);
عناصر التحكم في الموضع على الخريطة
لقد غيّرت عناصر التحكم في الموضع مساحة كبيرة في الإصدار 3. في الإصدار 2، تستخدم الطريقة addControl()
معلّمة ثانية اختيارية تتيح لك تحديد موضع عنصر التحكّم نسبةً إلى زوايا الخريطة.
في الإصدار 3، يمكنك تحديد موضع عنصر تحكّم من خلال السمة
position
لخيارات التحكّم. لا يُعدّ وضع
عناصر التحكّم هذه مطلقًا، بل ستحدّد واجهة برمجة التطبيقات
عناصر التحكّم بشكل ذكي من خلال &&;;flowing";، حيث تدور حول عناصر الخريطة الحالية
ضمن قيود معيّنة (مثل حجم الخريطة).
ويضمن ذلك توافق عناصر التحكّم التلقائية مع عناصر التحكّم.
راجِع التحكّم في
الموضع في الإصدار 3 للحصول على مزيد من المعلومات.
يؤدي موضع الرمز التالي إلى إعادة ضبط عناصر التحكم من النماذج أعلاه:
var map = new GMap2(document.getElementById('map'));
map.setCenter(new GLatLng(-25.363882, 131.044922), 4);
// Add map type control
map.addControl(new GMapTypeControl(), new GControlPosition(
G_ANCHOR_TOP_LEFT, new GSize(10, 10)));
// Add scale
map.addControl(new GScaleControl(), new GControlPosition(
G_ANCHOR_BOTTOM_RIGHT, new GSize(20, 20)));
var myOptions = {
center: new google.maps.LatLng(-25.363882, 131.044922),
zoom: 4,
mapTypeId: google.maps.MapTypeId.ROADMAP,
// Add map type control
mapTypeControl: true,
mapTypeControlOptions: {
style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR,
position: google.maps.ControlPosition.TOP_LEFT
},
// Add scale
scaleControl: true,
scaleControlOptions: {
position: google.maps.ControlPosition.BOTTOM_RIGHT
}
};
var map = new google.maps.Map(document.getElementById('map'),
myOptions);
عناصر التحكّم المخصّصة
تتيح لك واجهة برمجة تطبيقات JavaScript للخرائط إنشاء عناصر تحكم تنقّل مخصصة.
لتخصيص عناصر التحكّم باستخدام واجهة برمجة التطبيقات للإصدار 2، يمكنك تصنيف الفئة GControl
فرعيًا وتحديد المعالجات للطريقتَين initialize()
وgetDefaultPosition()
.
ما مِن فئة GControl
في الإصدار 3. بدلاً من ذلك،
يتم تمثيل عناصر التحكّم كعناصر DOM. لإضافة عنصر تحكّم مخصّص
باستخدام الإصدار 3 من واجهة برمجة التطبيقات، يمكنك إنشاء بنية DOM لعنصر التحكّم في
أداة إنشاء كعنصر فرعي لعنصر Node
(مثل
عنصر <div>
) وإضافة أدوات معالجة الأحداث للتعامل مع أي
أحداث DOM. ادفع Node
إلى المصفوفة'
controls[position]
لإضافة نسخة من عنصر التحكّم المخصّص إلى خريطتك.
نظرًا لعملية تنفيذ الفئة HomeControl
التي تلتزم بمتطلبات الواجهة المذكورة أعلاه (راجِع مستندات عناصر التحكم المخصّصة للحصول على التفاصيل)، توضّح نماذج الرموز التالية كيفية إضافة عنصر تحكّم مخصّص إلى الخريطة.
map.addControl(new HomeControl(),
GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(10, 10)));
var homeControlDiv = document.createElement('DIV');
var homeControl = new HomeControl(homeControlDiv, map);
map.controls[google.maps.ControlPosition.TOP_RIGHT].push(
homeControlDiv);
النوافذ المتراكبة
تعكس التراكبات العناصر التي "تضيفها"&إلى "العرض" على الخريطة لتحديد النقاط
أو الخطوط أو المناطق أو مجموعات من العناصر.
إضافة الطبقات وإزالتها
تختلف أنواع العناصر
المُمثّلة من خلال العناصر المركّبة بين الإصدار v2 وv3، ولكن يتم التعامل مع هذه العناصر
بشكل مختلف.
تمت إضافة التراكبات في الإصدار 2 من واجهة برمجة التطبيقات وإزالتها من الخريطة باستخدام طريقتي addOverlay()
وremoveOverlay()
للعنصر GMap2
. في الإصدار 3، يمكنك تحديد خريطة لتراكب من خلال السمة map
لفئة خيارات التراكب المرتبطة.
ويمكنك أيضًا إضافة تراكب أو إزالته مباشرةً من خلال استدعاء
طريقة setMap()
لكائن التراكب وتحديد الخريطة المطلوبة. ويؤدي ضبط خاصية الخريطة على null
إلى إزالة التراكب.
لا توجد طريقة clearOverlays()
في الإصدار 3.
إذا أردت إدارة مجموعة من العناصر المركّبة، عليك إنشاء مصفوفة للاحتفاظ بها. باستخدام هذه المصفوفة، يمكنك بعد ذلك استدعاء setMap()
في كل تراكب على الشاشة (أي تمرير null
إذا كنت بحاجة إلى إزالتها).
أقلام سحب قابلة للسحب
بشكل تلقائي، يمكن النقر على العلامات ولكن لا يمكن سحبها. تضيف العينتان التاليتان علامة قابلة للسحب:
var myLatLng = new GLatLng(-25.363882, 131.044922);
var map = new GMap2(document.getElementById('map'));
map.setCenter(myLatLng, 4);
var marker = new GMarker(latLng, {
draggable: true
});
map.addOverlay(marker);
var myLatLng = new google.maps.LatLng(-25.363882, 131.044922);
var map = new google.maps.Map(
document.getElementById('map'), {
center: myLatLng,
zoom: 4,
mapTypeId: google.maps.MapTypeId.ROADMAP
});
var marker = new google.maps.Marker({
position: myLatLng,
draggable: true,
map: map
});
الرموز
يمكنك تحديد رمز مخصص لعرضه بدلاً من العلامة التلقائية.
لاستخدام صورة مخصّصة في الإصدار 2، يمكنك إنشاء مثيل GIcon
من G_DEFAULT_ICON type
وتعديله. إذا كانت صورتك أكبر أو أصغر من الرمز التلقائي، يجب تحديدها باستخدام مثيل GSize
.
تبسّط واجهة برمجة التطبيقات v3 API هذه العملية قليلاً.
ما عليك سوى ضبط خاصية icon
الخاصة بالعلامة على عنوان URL للصورة المخصّصة، وستعمل واجهة برمجة التطبيقات على تغيير حجم الرمز تلقائيًا.
توفّر واجهة برمجة تطبيقات JavaScript للخرائط أيضًا إمكانية استخدام الرموز المعقّدة.
يمكن أن يتضمن الرمز المُعقَّد مربّعات متعدّدة أو أشكالًا معقّدة
أو يحدّد ترتيب "&;;; العديد من الميزات" حيث يجب أن تظهر الصور مقارنةً
بتراكبات أخرى. لإضافة شكل إلى علامة في الإصدار 2،
يجب تحديد الخاصية الإضافية في كل مثيل GIcon
وتمرير هذا كخيار
إلى دالة إنشاء GMarker
. في الإصدار 3، يجب أن تضبط الرموز المحدّدة بهذه الطريقة سمات icon
على عنصر من النوع Icon
.
تظليل العلامات غير متوافق في الإصدار 3.
تعرض الأمثلة التالية علمًا شاطئيًا في بوندي بيتش في أستراليا، مع ظهور الجزء الشفاف من الرمز غير القابل للنقر:
var map = new GMap2(document.getElementById('map'));
map.setCenter(new GLatLng(-25.363882, 131.044922), 4);
map.setUIToDefault();
var flagIcon = new GIcon(G_DEFAULT_ICON);
flagIcon.image = '/images/beachflag.png';
flagIcon.imageMap = [1, 1, 1, 20, 18, 20, 18 , 1];
var bbLatLng = new GLatLng(-33.890542, 151.274856);
map.addOverlay(new GMarker(bbLatLng, {
icon: flagIcon
}));
var map = new google.maps.Map(
document.getElementById('map'), {
center: new google.maps.LatLng(-25.363882, 131.044922),
zoom: 4,
mapTypeId: google.maps.MapTypeId.ROADMAP
});
var shape = {
coord: [1, 1, 1, 20, 18, 20, 18 , 1],
type: 'poly'
};
var bbLatLng = new google.maps.LatLng(-33.890542, 151.274856);
var bbMarker = new google.maps.Marker({
icon: '/images/beachflag.png'
shape: shape,
position: bbLatLng,
map: map
});
خطوط متعددة
يتألف الخط المتعدد من مصفوفة من LatLng
، بالإضافة إلى سلسلة من شرائح الخطوط التي تربط هذه المواقع بتسلسل مرتب.
يتشابه إنشاء كائن Polyline
في الإصدار 3 وعرضه مع استخدام كائن GPolyline
في الإصدار 2. ترسِل النماذج التالية
خطًا جيوديسيًا شبه شفاف بعرض 3 بكسل من زيورخ إلى سيدني حتى سنغافورة:
var polyline = new GPolyline(
[
new GLatLng(47.3690239, 8.5380326),
new GLatLng(1.352083, 103.819836),
new GLatLng(-33.867139, 151.207114)
],
'#FF0000', 3, 0.5, {
geodesic: true
});
map.addOverlay(polyline);
var polyline = new google.maps.Polyline({
path: [
new google.maps.LatLng(47.3690239, 8.5380326),
new google.maps.LatLng(1.352083, 103.819836),
new google.maps.LatLng(-33.867139, 151.207114)
],
strokeColor: '#FF0000',
strokeOpacity: 0.5,
strokeWeight: 3,
geodesic: true
});
polyline.setMap(map);
الخطوط المتعددة المشفّرة
لا يتوفّر أي دعم في الإصدار 3 لإنشاء عناصر Polyline
مباشرةً من الخطوط المتعددة المشفّرة. بدلاً من ذلك، توفّر مكتبة الهندسة طرقًا لترميز الخطوط المتعددة وفك ترميزها. اطّلِع على المكتبات في الإصدار 3 من API للخرائط
للحصول على مزيد من المعلومات عن كيفية تحميل هذه المكتبة.
توضّح الأمثلة أدناه الخط المضلّل نفسه، ويستخدم رمز v3 الطريقة decodePath()
من مساحة الاسم google.maps.geometry.encoding
.
var polyline = new GPolyline.fromEncoded({
points: 'kwb`Huqbs@ztzwGgvpdQbw}uEoif`H',
levels: 'PPP',
zoomFactor: 2,
numLevels: 18,
color: '#ff0000',
opacity: 0.8,
weight: 3
});
map.addOverlay(polyline);
var polyline = new google.maps.Polyline({
path: google.maps.geometry.encoding.decodePath(
'kwb`Huqbs@ztzwGgvpdQbw}uEoif`H'),
strokeColor: '#FF0000',
strokeOpacity: 0.5,
strokeWeight: 3,
});
polyline.setMap(map);
المضلعات
يحدد المضلّع منطقة داخل حلقة مغلقة. وكما هو الحال مع الكائن Polyline
، تتكون عناصر Polygon
من سلسلة من النقاط في التسلسل المُرتَّب. تتشابه الفئة Polygon
v
إلى حدّ كبير مع الفئة v2
GPolygon
، باستثناء الاستثناء
البارز الذي لم يعُد عليك تكراره في البداية. في نهاية
المسار لإغلاق الحلقة. ستغلق واجهة برمجة التطبيقات الإصدار 3
أي مضلعات تلقائيًا عن طريق رسم ضغطة تربط
آخر إحداثيات مرة أخرى بالإحداثيات الأولى. تُنشئ مقتطفات الرمز التالية مضلعًا يمثّل مثلث برمودا:
var map = new GMap2(document.getElementById('map'));
map.setCenter(new GLatLng(24.886436, -70.268554), 5);
var bermudaTriangle = new GPolygon(
[
new GLatLng(25.774252, -80.190262),
new GLatLng(18.466465, -66.118292),
new GLatLng(32.321384, -64.75737),
new GLatLng(25.774252, -80.190262)
],
'#FF0000', 2, 0.8, '#FF0000', 0.35);
map.addOverlay(bermudaTriangle);
var map = new google.maps.Map(document.getElementById('map'), {
center: new google.maps.LatLng(24.886436, -70.268554),
mapTypeId: google.maps.MapTypeId.TERRAIN,
zoom: 5
});
var bermudaTriangle = new google.maps.Polygon({
paths: [
new google.maps.LatLng(25.774252, -80.190262),
new google.maps.LatLng(18.466465, -66.118292),
new google.maps.LatLng(32.321384, -64.75737)
],
strokeColor: '#FF0000',
strokeWeight: 2,
strokeOpacity: 0.8,
fillColor: '#FF0000',
fillOpacity: 0.35
});
bermudaTriangle.setMap(map);
أشكال قابلة للتعديل للمستخدم
يمكن جعل الخطوط المتعددة والمضلعات قابلة للتعديل للمستخدم. وفي ما يلي مقتطفات الرمز التالية:
map.addOverlay(polyline);
polyline.enableEditing();
polyline.setMap(map);
polyline.setEditable(true);
للحصول على إمكانات الرسم الأكثر تقدمًا، يمكنك الاطّلاع على
مكتبة الرسم
في مستندات v3.
نوافذ المعلومات
تعرض InfoWindow
المحتوى في نافذة عائمة أعلى الخريطة. هناك بعض الاختلافات الرئيسية بين نوافذ معلومات الإصدار 2 وv3:
- يمكن استخدام
GInfoWindow
فقط في كل خريطة، في حين تتوافق واجهة برمجة التطبيقات v3 مع العديد من InfoWindow
في الوقت نفسه على كل خريطة.
- سيظل الإصدار 3
InfoWindow
مفتوحًا عند
النقر على الخريطة. يتم إغلاق الإصدار 2 من GInfoWindow
تلقائيًا عند النقر على الخريطة. يمكنك محاكاة سلوك
الإصدار 2 من خلال إضافة أداة معالجة click
إلى
الكائن Map
.
- لا توفّر واجهة برمجة التطبيقات V3 API دعمًا أصليًا لعلامة تبويب
InfoWindow
.
تراكبات الأرض
لوضع صورة على خريطة، يجب استخدام عنصر GroundOverlay
. إنّ مُنشئ GroundOverlay
هو نفسه في الإصدار 2 وV3: فهو يحدّد عنوان URL لصورة وحدود الصورة كمعلّمات.
يضع المثال التالي خريطة قديمة لمدينة "نيوآرك"، ولاية نيو جيرسي على الخريطة
كتراكب:
var bounds = new GLatLngBounds(
new GLatLng(40.716216, -74.213393),
new GLatLng(40.765641, -74.139235));
var overlay = new GGroundOverlay(
'http://lib.utexas.edu/maps/historical/newark_nj_1922.jpg',
bounds);
map.addOverlay(overlay);
var bounds = new google.maps.LatLngBounds(
new google.maps.LatLng(40.716216, -74.213393),
new google.maps.LatLng(40.765641, -74.139235));
var overlay = new google.maps.GroundOverlay(
'http://lib.utexas.edu/maps/historical/newark_nj_1922.jpg',
bounds);
overlay.setMap(map);
أنواع الخرائط
تختلف أنواع الخرائط المتاحة في الإصدار 2 وv3 قليلاً، ولكن تتوفّر جميع أنواع الخرائط الأساسية في كلا إصدارَي واجهة برمجة التطبيقات. بشكل تلقائي، يستخدم الإصدار 2
الإصدارات القياسية "painting"خريطة الطرق. ومع ذلك، يتطلب الإصدار 3 نوع خريطة محدد يتم تقديمه عند إنشاء عنصر google.maps.Map
.
أنواع الخرائط الشائعة
تتوفر أربعة أنواع أساسية من الخرائط في كل من الإصدارين 2 و3:
- تعرض
MapTypeId.ROADMAP
(تحل محل G_NORMAL_MAP
)
عرض خريطة الطريق.
MapTypeId.SATELLITE
(تحل محل G_SATELLITE_MAP
)
عرض صور القمر الصناعي من Google Earth.
- تعرض
MapTypeId.HYBRID
(تحل محل G_HYBRID_MAP
) مزيجًا من المشاهدات العادية والقمر الصناعي.
- تعرض
MapTypeId.TERRAIN
(تحل محل G_PHYSICAL_MAP
) خريطة فعلية استنادًا إلى معلومات التضاريس.
فيما يلي مثال للإصدارين 2 و3 من إعداد الخريطة على عرض التضاريس:
map.setMapType(G_PHYSICAL_MAP);
map.setMapTypeId(google.maps.MapTypeId.TERRAIN);
أجرى الإصدار 3 من JavaScript JavaScript للخرائط بعض التغييرات على أنواع الخرائط الأقل شيوعًا أيضًا:
- لا تتوفر مربعات الخرائط للأجسام السماوية بخلاف Earth
كأنواع خرائط في واجهة برمجة التطبيقات v3، ولكن يمكن الوصول إليها كأنواع خرائط مخصّصة كما هو موضح في هذا المثال.
- لا يتوفّر نوع خريطة خاص في الإصدار 3 يستبدل نوع
G_SATELLITE_3D_MAP
من الإصدار 2. ويمكنك بدلاً من ذلك دمج مكوّن Google Earth الإضافي في خرائط v3 باستخدام هذه المكتبة.
الحد الأقصى للصور في Zoom
لا تتوفّر دائمًا صور القمر الصناعي على مستويات تكبير/تصغير عالية. إذا كنت تريد معرفة أعلى مستوى تكبير متاح قبل ضبط مستوى التكبير أو التصغير، استخدِم الفئة google.maps.MaxZoomService
. تحلّ هذه الفئة محلّ الطريقة GMapType.getMaxZoomAtLatLng()
من الإصدار 2.
var point = new GLatLng(
180 * Math.random() - 90, 360 * Math.random() - 180);
var map = new GMap2(document.getElementById("map"));
map.setUIToDefault();
map.setCenter(point);
map.setMapType(G_HYBRID_MAP);
map.getCurrentMapType().getMaxZoomAtLatLng(point,
function(response) {
if (response.status) {
map.setZoom(response.zoom);
} else {
alert("Error in Max Zoom Service.");
}
});
var myLatlng = new google.maps.LatLng(
180 * Math.random() - 90, 360 * Math.random() - 180);
var map = new google.maps.Map(
document.getElementById("map"),{
zoom: 0,
center: myLatlng,
mapTypeId: google.maps.MapTypeId.HYBRID
});
var maxZoomService = new google.maps.MaxZoomService();
maxZoomService.getMaxZoomAtLatLng(
myLatlng,
function(response) {
if (response.status == google.maps.MaxZoomStatus.OK) {
map.setZoom(response.zoom);
} else {
alert("Error in Max Zoom Service.");
}
});
صور من منظور جوي
عند تفعيل"الصور الجوية"في الإصدار 3، تشبه عناصر التحكم عنصر التحكم v2
GLargeZoomControl3D
مع عنصر تحكّم بيني إضافي
لعرض الإعلانات بالتناوب للتدوير عبر الاتجاهات المتوافقة.
يمكنك تتبُّع المدن التي تتوفّر فيها حاليًا صور بزاوية 45 درجة على هذه الخريطة. عند توفّر صور بزاوية 45 درجة، تتم إضافة خيار قائمة فرعية إلى زر القمر الصناعي في Maps API.
طبقات
الطبقات هي عناصر على الخريطة تتكوّن من طبقة واحدة أو أكثر من العناصر المركّبة. ويمكن التلاعب بها كوحدة واحدة وتعكس عادةً
مجموعات من العناصر.
الطبقات المتوافقة
توفّر واجهة برمجة التطبيقات v3 إمكانية الوصول إلى العديد من الطبقات المختلفة. تتداخل هذه الطبقات
مع فئة GLayer
في المناطق التالية:
-
يعرِض الكائن
KmlLayer
عناصر KML وGeoRSS في
تراكبات الإصدار 3، ما يعادل طبقة
v2.GeoXml
.
- يعرِض العنصر
TrafficLayer
طبقة توضّح
حالات حركة المرور، على غرار التراكب GTrafficOverlay
.
تختلف هذه الطبقات عن الإصدار 2. وفي ما يلي توضيح للفروق. ويمكن إضافتها إلى خريطة عن طريق استدعاء الخاصية setMap()
،
مع تمرير العنصر Map
عليها لعرض الطبقة.
يمكنك الاطّلاع على مزيد من المعلومات حول الطبقات المتوافقة في مستندات الطبقات.
طبقات KML وGeoRSS
تتيح واجهة برمجة تطبيقات JavaScript للخرائط تنسيقَي بيانات KML وGeoRSS
لعرض المعلومات الجغرافية. يجب أن تكون ملفات KML أو GeoRSS متاحة للجميع إذا كنت تريد تضمينها في الخريطة. في الإصدار 3، يتم عرض تنسيقات البيانات هذه باستخدام مثيل KmlLayer
، والذي يحل محل العنصر GGeoXml
من الإصدار 2.
تتميّز واجهة برمجة التطبيقات v3 بمرونة أكبر عند عرض ملفات KML، بحيث تسمح لك
بإيقاف InfoWindows وتعديل استجابة النقر. اطّلِع على مستندات طبقتَي KML وGeoRSS V3 للحصول على مزيد من التفاصيل.
عند عرض KmlLayer
،
يتم تطبيق قيود الحجم والتعقيد، ويمكنك الاطّلاع على
مستندات KmlLayer
للحصول على التفاصيل.
تقارن النماذج التالية كيفية تحميل ملف KML.
geoXml = new GGeoXml(
'https://googlearchive.github.io/js-v2-samples/ggeoxml/cta.kml');
map.addOverlay(geoXml);
var layer = new google.maps.KmlLayer(
'https://googlearchive.github.io/js-v2-samples/ggeoxml/cta.kml', {
preserveViewport: true
});
layer.setMap(map);
طبقة حركة المرور
يتيح لك الإصدار 3 إضافة معلومات عن حركة المرور في الوقت الفعلي (حيثما كانت متاحة) إلى خرائطك باستخدام الكائن TrafficLayer
. ويتم تقديم معلومات عن حركة المرور خلال وقت تقديم الطلب. توضّح هذه الأمثلة معلومات عن الكثافة في حركة المرور في لوس أنجلوس:
var map = new GMap2(document.getElementById('map'));
map.setCenter(new GLatLng(34.0492459, -118.241043), 13);
map.setUIToDefault();
var trafficOptions = {incidents:false};
trafficInfo = new GTrafficOverlay(trafficOptions);
map.addOverlay(trafficInfo);
var map = new google.maps.Map(
document.getElementById('map'), {
center: new google.maps.LatLng(34.0492459, -118.241043),
mapTypeId: google.maps.MapTypeId.ROADMAP,
zoom: 13
});
var trafficLayer = new google.maps.TrafficLayer();
trafficLayer.setMap(map);
على عكس الإصدار 2، لا تتوفّر خيارات لأداة الإنشاء TrafficLayer
في الإصدار 3. لا تتوفر الحوادث في الإصدار 3.
الخدمات
ترميز المواقع الجغرافية
توفّر واجهة برمجة تطبيقات JavaScript لـ"خرائط Google"عنصر geocoder
لعناوين الترميز الجغرافي بشكل ديناميكي من إدخال المستخدمين. وإذا كنت تريد
ترميز عناوين ثابتة ثابتة، يمكنك الاطّلاع على
مستندات واجهة برمجة تطبيقات الترميز الجغرافي.
تمت ترقية واجهة برمجة التطبيقات للترميز الجغرافي
وتحسينها بشكل ملحوظ وإضافة ميزات جديدة وتغيير
طريقة تمثيل البيانات.
GClientGeocoder
في واجهة برمجة التطبيقات للإصدار 2، تم توفير طريقتين مختلفتين
للترميز الجغرافي العكسي والعكسي، بالإضافة إلى طرق إضافية
للتأثير في كيفية تنفيذ الترميز الجغرافي. في المقابل، لا يقدّم الكائن Geocoder
الإصدار 3 سوى طريقة
geocode()
تأخذ عنصرًا حرفيًا يحتوي على عبارات الإدخال
(في شكل كائن طلبات الترميز الجغرافي) وطريقة معاودة الاتصال. بناءً على ما إذا كان الطلب يحتوي على سمة address
نصية أو كائن LatLng
، ستعرض واجهة برمجة تطبيقات الترميز الجغرافي استجابة للأمام أو عكسًا للترميز الجغرافي. يمكنك التأثير في أداء الترميز الجغرافي
من خلال تمرير حقول إضافية إلى طلب الترميز الجغرافي:
- يؤدي تضمين
address
نصي إلى تشغيل الترميز الجغرافي للأمام،
ما يعادل استدعاء الطريقة getLatLng()
.
- يؤدي تضمين كائن
latLng
إلى تشغيل الترميز الجغرافي العكسي، ما يعادل استدعاء الطريقة getLocations()
.
- يؤدي تضمين السمة
bounds
إلى تفعيل انحياز إطار العرض، ما يعادل استدعاء الطريقة setViewport()
.
- عند تضمين السمة
region
، يتم تفعيل انحياز رمز المنطقة ما يعادل استدعاء الطريقة setBaseCountryCode()
.
تختلف استجابات الترميز الجغرافي في الإصدار 3 عن استجابات الإصدار 2. تستبدل واجهة برمجة التطبيقات V3 واجهة البنية المتداخلة التي يستخدمها الإصدار 2 ببنية مسطّحة أسهل في التحليل. بالإضافة إلى ذلك، تكون الردود على الإصدار 3 أكثر تفصيلاً: تتضمّن كل نتيجة مكوّنات
عناوين متعددة تساعد في تقديم فكرة أفضل عن دقة
كل نتيجة.
ويتخذ الرمز التالي عنوانًا نصيًا ويعرض النتيجة الأولى من الترميز الجغرافي:
var geocoder = new GClientGeocoder();
var infoPanel;
var map;
var AccuracyDescription = [
'Unknown accuracy', 'country level accuracy',
'region level accuracy', 'sub-region level accuracy',
'town level accuracy', 'post code level accuracy',
'street level accuracy', 'intersection level accuracy',
'address level accuracy', 'premise level accuracy',
];
function geocode_result_handler(response) {
if (!response || response.Status.code != 200) {
alert('Geocoding failed. ' + response.Status.code);
} else {
var bounds = new GLatLngBounds(new GLatLng(
response.Placemark[0].ExtendedData.LatLonBox.south,
response.Placemark[0].ExtendedData.LatLonBox.west
), new GLatLng(
response.Placemark[0].ExtendedData.LatLonBox.north,
response.Placemark[0].ExtendedData.LatLonBox.east
));
map.setCenter(bounds.getCenter(),
map.getBoundsZoomLevel(bounds));
var latlng = new GLatLng(
response.Placemark[0].Point.coordinates[1],
response.Placemark[0].Point.coordinates[0]);
infoPanel.innerHTML += '<p>1st result is <em>' +
// No info about location type
response.Placemark[0].address +
'</em> of <em>' +
AccuracyDescription[response.Placemark[0].
AddressDetails.Accuracy] +
'</em> at <tt>' + latlng + '</tt></p>';
var marker_title = response.Placemark[0].address +
' at ' + latlng;
map.clearOverlays();
var marker = marker = new GMarker(
latlng,
{'title': marker_title}
);
map.addOverlay(marker);
}
}
function geocode_address() {
var address = document.getElementById('input-text').value;
infoPanel.innerHTML = '<p>Original address: ' + address + '</p>';
geocoder.getLocations(address, geocode_result_handler);
}
function initialize() {
map = new GMap2(document.getElementById('map'));
map.setCenter(new GLatLng(38, 15), 2);
map.setUIToDefault();
infoPanel = document.getElementById('info-panel');
}
var geocoder = new google.maps.Geocoder();
var infoPanel;
var map;
var marker;
function geocode_result_handler(result, status) {
if (status != google.maps.GeocoderStatus.OK) {
alert('Geocoding failed. ' + status);
} else {
map.fitBounds(result[0].geometry.viewport);
infoPanel.innerHTML += '<p>1st result for geocoding is <em>' +
result[0].geometry.location_type.toLowerCase() +
'</em> to <em>' +
result[0].formatted_address + '</em> of types <em>' +
result[0].types.join('</em>, <em>').replace(/_/, ' ') +
'</em> at <tt>' + result[0].geometry.location +
'</tt></p>';
var marker_title = result[0].formatted_address +
' at ' + latlng;
if (marker) {
marker.setPosition(result[0].geometry.location);
marker.setTitle(marker_title);
} else {
marker = new google.maps.Marker({
position: result[0].geometry.location,
title: marker_title,
map: map
});
}
}
}
function geocode_address() {
var address = document.getElementById('input-text').value;
infoPanel.innerHTML = '<p>Original address: ' + address + '</p>';
geocoder.geocode({'address': address}, geocode_result_handler);
}
function initialize() {
map = new google.maps.Map(document.getElementById('map'), {
center: new google.maps.LatLng(38, 15),
zoom: 2,
mapTypeId: google.maps.MapTypeId.HYBRID
});
infoPanel = document.getElementById('info-panel');
}
اتجاهات
يحل الإصدار 3 من JavaScript API API محل الفئة GDirections
من الإصدار 2 إلى الفئة DirectionsService
لاحتساب الاتجاهات.
تحلّ طريقة route()
في الإصدار 3 محلّ
طريقتَي load()
وloadFromWaypoints()
من
واجهة برمجة التطبيقات للإصدار 2. تعتمد هذه الطريقة على كائن DirectionsRequest
واحد حرفي يحتوي على عبارات الإدخال وطريقة استدعاء لتنفيذها عند استلام الرد. يمكن تقديم خيارات في هذا العنصر حرفيًا،
على غرار عنصر GDirectionsOptions
حرفيًا في الإصدار 2.
في الإصدار 3 من واجهة برمجة تطبيقات JavaScript للخرائط، تم فصل مهمة إرسال طلبات الاتجاهات عن مهمة عرض الطلبات التي تتم معالجتها الآن في فئة DirectionsRenderer
. ويمكنك ربط عنصر DirectionsRenderer
بأي خريطة أو
عنصر DirectionsResult
من خلال طريقتَي setMap()
وsetDirections()
. بما أنّ العارض هو MVCObject
، سيرصد أي تغييرات على خصائصه وسيعدّل الخريطة عند تغيير الاتجاهات المرتبطة به.
يوضح الرمز التالي كيفية طلب اتجاهات المشي إلى موقع معين باستخدام مسارات المشاة من العنوان. يُرجى ملاحظة أن
الإصدار 3 فقط هو قادر على توفير اتجاهات المشي في مسار المشاة في
حديقة حيوانات دبلن.
var map;
var directions;
var directionsPanel;
function initialize() {
var origin = new google.maps.LatLng(53.348172, -6.297285);
var destination = new google.maps.LatLng(53.355502, -6.30557);
directionsPanel = document.getElementById("route");
map = new GMap2(document.getElementById('map'));
map.setCenter(origin, 10);
map.setUIToDefault();
directions = new GDirections(map, directionsPanel);
directions.loadFromWaypoints(
[origin, destination], {
travelMode: 'G_TRAVEL_MODE_WALKING',
});
}
var map;
var directionsRenderer;
var directionsService = new google.maps.DirectionsService();
function initialize() {
var origin = new google.maps.LatLng(53.348172, -6.297285);
var destination = new google.maps.LatLng(53.355502, -6.30557);
directionsRenderer = new google.maps.DirectionsRenderer();
map = new google.maps.Map(
document.getElementById('map'), {
center: origin,
zoom: 10,
mapTypeId: google.maps.MapTypeId.ROADMAP
});
directionsRenderer.setPanel(document.getElementById("route"));
directionsRenderer.setMap(map);
directionsService.route({
origin: origin,
destination: destination,
travelMode: google.maps.DirectionsTravelMode.WALKING
}, function(result, status) {
if (status == google.maps.DirectionsStatus.OK) {
directionsRenderer.setDirections(result);
}
});
}
التجوّل الافتراضي
توفّر ميزة "التجوّل الافتراضي من Google" عروضًا تفاعلية بزاوية 360 درجة من مواقع جغرافية محدّدة ضمن نطاق التغطية. تتوافق واجهة برمجة التطبيقات V3 مع ميزة "التجوّل الافتراضي" في الأصل داخل المتصفّح، على عكس الإصدار 2 الذي يتطلّب المكوّن الإضافي Flash® لعرض صور "التجوّل الافتراضي".
تتوفّر صور "التجوّل الافتراضي" من خلال استخدام العنصر StreetViewPanorama
في الإصدار 3 أو العنصر GStreetviewPanorama
في الإصدار 2. وهذه الصفوف لها واجهات مختلفة، ولكنها تؤدي الدور نفسه: توصيل حاوية div
بصور "التجوّل الافتراضي" والسماح لك بتحديد الموقع الجغرافي ونقاط المشاهدة (ووجهة النظر) لبانوراما "التجوّل الافتراضي".
function initialize() {
var fenwayPark = new GLatLng(42.345573, -71.098326);
panoramaOptions = {
latlng: fenwayPark,
pov: {
heading: 35,
pitch: 5,
zoom: 1
}
};
var panorama = new GStreetviewPanorama(
document.getElementById('pano'),
panoramaOptions);
GEvent.addListener(myPano, "error", handleNoFlash);
}
function handleNoFlash(errorCode) {
if (errorCode == FLASH_UNAVAILABLE) {
alert('Error: Your browser does not support Flash');
return;
}
}
function initialize() {
var fenway = new google.maps.LatLng(42.345573, -71.098326);
var panoramaOptions = {
position: fenway,
pov: {
heading: 35,
pitch: 5,
zoom: 1
}
};
var panorama = new google.maps.StreetViewPanorama(
document.getElementById('pano'),
panoramaOptions);
}
ويمكن الوصول المباشر إلى بيانات "التجوّل الافتراضي" من خلال
العنصر StreetViewService
في الإصدار 3 أو العنصر
GStreetviewClient
المشابه في الإصدار 2. وتتوفّر واجهات مماثلة
لاسترداد بيانات "التجوّل الافتراضي" أو التحقّق منها،
والسماح بالبحث حسب الموقع الجغرافي أو معرّف البانوراما.
في الإصدار 3، يتم تفعيل "التجوّل الافتراضي" بشكلٍ تلقائي. ستظهر الخريطة مع عنصر تحكُّم في "التجوّل الافتراضي" وستُعيد واجهة برمجة التطبيقات استخدام عنصر div للخريطة لعرض الصور البانورامية للتجوّل الافتراضي. ويوضّح الرمز التالي كيفية محاكاة
سلوك الإصدار 2 من خلال فصل صور "بانوراما" لميزة "التجوّل الافتراضي" في div منفصل.
var marker;
var panoClient = new GStreetviewClient();
function initialize() {
if (GBrowserIsCompatible()) {
var myPano = new GStreetviewPanorama(
document.getElementById('pano'));
GEvent.addListener(myPano, 'error', handleNoFlash);
var map = new GMap2(document.getElementById('map'));
map.setCenter(new GLatLng(42.345573, -71.098326), 16);
map.setUIToDefault();
GEvent.addListener(map, 'click', function(overlay, latlng) {
if (marker) {
marker.setLatLng(latlng);
} else {
marker = new GMarker(latlng);
map.addOverlay(marker);
}
var nearestPano = panoClient.getNearestPanorama(
latlng, processSVData);
});
function processSVData(panoData) {
if (panoData.code != 200) {
alert("Panorama data not found for this location.");
}
var latlng = marker.getLatLng();
var dLat = latlng.latRadians()
- panoData.location.latlng.latRadians();
var dLon = latlng.lngRadians()
- panoData.location.latlng.lngRadians();
var y = Math.sin(dLon) * Math.cos(latlng.latRadians());
var x = Math.cos(panoData.location.latlng.latRadians()) *
Math.sin(latlng.latRadians()) -
Math.sin(panoData.location.latlng.latRadians()) *
Math.cos(latlng.latRadians()) * Math.cos(dLon);
var bearing = Math.atan2(y, x) * 180 / Math.PI;
myPano.setLocationAndPOV(panoData.location.latlng, {
yaw: bearing
});
}
function handleNoFlash(errorCode) {
if (errorCode == FLASH_UNAVAILABLE) {
alert('Error: Your browser does not support Flash');
return;
}
}
}
}
// Load the API with libraries=geometry
var map;
var marker;
var panorama;
var sv = new google.maps.StreetViewService();
function radians(degrees) { return Math.PI * degrees / 180.0 };
function initialize() {
panorama = new google.maps.StreetViewPanorama(
document.getElementById("pano"));
map = new google.maps.Map(
document.getElementById('map'), {
center: new google.maps.LatLng(42.345573, -71.098326),
mapTypeId: google.maps.MapTypeId.ROADMAP,
zoom: 16
});
google.maps.event.addListener(map, 'click', function(event) {
if (!marker) {
marker = new google.maps.Marker({
position: event.latLng,
map: map
});
} else {
marker.setPosition(event.latLng);
}
sv.getPanoramaByLocation(event.latLng, 50, processSVData);
});
}
function processSVData(panoData, status) {
if (status == google.maps.StreetViewStatus.OK) {
alert("Panorama data not found for this location.");
}
var bearing = google.maps.geometry.spherical.computeHeading(
panoData.location.latLng, marker.getPosition());
panorama.setPano(panoData.location.pano);
panorama.setPov({
heading: bearing,
pitch: 0,
zoom: 1
});
panorama.setVisible(true);
marker.setMap(panorama);
}