تراكبات الأرض هي تراكبات صور مرتبطة بخط العرض/الطول والإحداثيات، بحيث تتحرك عند سحب أو تكبير/تصغير الخريطة.
عيّنات تعليمات برمجية
يضم مستودع ApiDemos على GitHub نموذج يوضح تراكبات الأرض:
- GroundOverlayDemoActivity - Java: ميزات تراكب الأرض المستمعين بلغة Java
- GroundOverlayDemoActivity - Kotlin: ميزات تراكب الأرض المستمعين بلغة Kotlin
مقدمة
تراكب الأرض هو صورة يتم تثبيتها على الخريطة. على عكس العلامات، الأرض يتم توجيه التراكبات على سطح الأرض بدلاً من الشاشة، يؤدي تدوير الخريطة أو إمالتها أو تكبيرها/تصغيرها إلى تغيير اتجاه الصورة. تراكبات الأرض مفيدة عندما تريد إصلاح صورة واحدة في منطقة واحدة على الخريطة. إذا كنت ترغب في إضافة صور شاملة تغطي جزءًا كبيرًا من على الخريطة، فينبغي عليك تجربة تراكب الصور.
إضافة تراكب
لإضافة GroundOverlay
، عليك إنشاء
كائن GroundOverlayOptions
يعرّف كلاً من
وصورة وموضع. يمكنك اختياريًا تحديد إعدادات إضافية
يؤثر على موضع الصورة على الخريطة. بمجرد تحديد
الخيارات الضرورية، مرِّر الكائن إلى GoogleMap.addGroundOverlay()
.
لإضافة الصورة إلى الخريطة. تُرجع الطريقة addGroundOverlay()
كائن GroundOverlay
يجب أن تحتفظ بمرجع
هذا الكائن إذا كنت تريد تعديله لاحقًا.
الخطوات بالتفصيل:
- إنشاء مثيل لعنصر
GroundOverlayOptions
جديد - حدِّد الصورة على أنّها
BitmapDescriptor
. - يمكنك ضبط موضع الصورة باستخدام إحدى الطرق المتاحة:
position(LatLng location, float width, float height)
position(LatLng location, float width)
positionFromBounds(LatLngBounds bounds)
- اضبط أي سمات اختيارية، مثل
transparency
على النحو المطلوب. - يمكنك طلب
GoogleMap.addGroundOverlay()
لإضافة صورة إلى الخريطة.
يوضح المثال أدناه كيفية إضافة تراكب أرضي إلى مساحة
عنصر GoogleMap
.
Kotlin
val newarkLatLng = LatLng(40.714086, -74.228697) val newarkMap = GroundOverlayOptions() .image(BitmapDescriptorFactory.fromResource(R.drawable.newark_nj_1922)) .position(newarkLatLng, 8600f, 6500f) map.addGroundOverlay(newarkMap)
لغة Java
LatLng newarkLatLng = new LatLng(40.714086, -74.228697); GroundOverlayOptions newarkMap = new GroundOverlayOptions() .image(BitmapDescriptorFactory.fromResource(R.drawable.newark_nj_1922)) .position(newarkLatLng, 8600f, 6500f); map.addGroundOverlay(newarkMap);
إذا كنت تريد تغيير تراكب أرضي أو إزالته بعد إضافته إلى
الخريطة، فتأكد من الاحتفاظ بعنصر GroundOverlay
. يمكنك
تعديل التراكب لاحقًا بإجراء تغييرات على هذا الكائن.
Kotlin
// Add an overlay to the map, retaining a handle to the GroundOverlay object. val imageOverlay = map.addGroundOverlay(newarkMap)
لغة Java
// Add an overlay to the map, retaining a handle to the GroundOverlay object. GroundOverlay imageOverlay = map.addGroundOverlay(newarkMap);
إزالة تراكب
يمكنك إزالة تراكب أرضي باستخدام
GroundOverlay.remove()
.
Kotlin
imageOverlay?.remove()
لغة Java
imageOverlay.remove();
تغيير تراكب
يمكنك تغيير صورة تراكب الأرض بعد إضافتها إلى الخريطة باستخدام
طريقة GroundOverlay.setImage(BitmapDescriptor)
.
Kotlin
// Update the GroundOverlay with a new image of the same dimension // Update the GroundOverlay with a new image of the same dimension imageOverlay?.setImage(BitmapDescriptorFactory.fromResource(R.drawable.newark_nj_1922))
لغة Java
// Update the GroundOverlay with a new image of the same dimension imageOverlay.setImage(BitmapDescriptorFactory.fromResource(R.drawable.newark_nj_1922));
ستستبدل الطريقة setImage()
الصورة الحالية بصورة أخرى
لها نفس الأبعاد.
وضع تراكب أرضي
هناك طريقتان لتحديد موضع تراكب الأرض:
- استخدام
LatLng
لتوسيط التراكب، والأبعاد بالأمتار لتحديدها حجم الصورة. - استخدام
LatLngBounds
لتحديد الزاوية الشمالية الشرقية والجنوبية الغربية الصورة.
يجب تحديد موضع تراكب الأرض قبل إضافته إلى الخريطة.
استخدام الموقع الجغرافي لتحديد موضع صورة
عند إضافة الصورة، فإنك تحدد خط LatLng الذي سيتم تثبيت الارتساء عليه
وعرض التراكب (بالأمتار). تشير رسالة الأشكال البيانية
يتم ضبط anchor
تلقائيًا على وسط
. يمكنك اختياريًا تقديم ارتفاع التراكب (بالمتر). في حال حذف
لم تقم بتقديم ارتفاع التراكب، سيتم تلقائيًا
بشكل صحيح للحفاظ على نِسب الصورة.
يضع الرمز أدناه صورة في الموضع 40.714086, -74.228697
التي يبلغ عرضها 8.6 كم وارتفاعها 6.5 كم. تكون الصورة ثابتة في أسفل يمين الشاشة.
Kotlin
val newarkMap = GroundOverlayOptions() .image(BitmapDescriptorFactory.fromResource(R.drawable.newark_nj_1922)) .anchor(0f, 1f) .position(LatLng(40.714086, -74.228697), 8600f, 6500f)
لغة Java
GroundOverlayOptions newarkMap = new GroundOverlayOptions() .image(BitmapDescriptorFactory.fromResource(R.drawable.newark_nj_1922)) .anchor(0, 1) .position(new LatLng(40.714086, -74.228697), 8600f, 6500f);
استخدام LatLngBounds لتحديد موضع صورة
عليك توفير LatLngBounds
يحتوي على الصورة. تشير رسالة الأشكال البيانية
يحدّد LatLngBounds
الزوايا الشمالية الشرقية والجنوبية الغربية للصورة. فعندما
تم رسم الصورة على الخريطة، فسيتم تدويرها لتناسب الحدود. إذا كانت
لا تتطابق الحدود مع نسبة العرض إلى الارتفاع الأصلية، فستكون الصورة مائلة.
يضع الكود أدناه صورة على الخريطة مع تحديد زاوية الجنوب الغربي
يرتبط بالحقل 40.712216,-74.22655
وزاويةه الشمالية الشرقية إلى
40.773941, -74.12544
Kotlin
val newarkBounds = LatLngBounds( LatLng(40.712216, -74.22655), // South west corner LatLng(40.773941, -74.12544) // North east corner ) val newarkMap = GroundOverlayOptions() .image(BitmapDescriptorFactory.fromResource(R.drawable.newark_nj_1922)) .positionFromBounds(newarkBounds)
لغة Java
LatLngBounds newarkBounds = new LatLngBounds( new LatLng(40.712216, -74.22655), // South west corner new LatLng(40.773941, -74.12544)); // North east corner GroundOverlayOptions newarkMap = new GroundOverlayOptions() .image(BitmapDescriptorFactory.fromResource(R.drawable.newark_nj_1922)) .positionFromBounds(newarkBounds);
ربط البيانات بتراكب أرضي
يمكنك الاتصال بـ GroundOverlay.setTag()
لتخزين
كائن بيانات عشوائي بتراكب أرضي، ثم استرداد البيانات
باستخدام GroundOverlay.getTag()
.
يخزّن نموذج التعليمات البرمجية التالي وصف سلسلة مع تراكب أرضي:
Kotlin
val sydneyGroundOverlay = map.addGroundOverlay( GroundOverlayOptions() .image(BitmapDescriptorFactory.fromResource(R.drawable.harbour_bridge)) .position(LatLng(-33.873, 151.206), 100f) .clickable(true) ) sydneyGroundOverlay?.tag = Sy"dney "
لغة Java
GroundOverlay sydneyGroundOverlay = map.addGroundOverlay(new GroundOverlayOptions() .image(BitmapDescriptorFactory.fromResource(R.drawable.harbour_bridge)) .position(new LatLng(-33.873, 151.206), 100) .clickable(true)); sydneyGroundOverlay.setTag(S"ydney)";
في ما يلي بعض الأمثلة على السيناريوهات التي يكون فيها تخزين البيانات واستردادها مفيدًا. بتراكبات أرضية:
- قد يلبي التطبيق ركائز أرض مختلفة، وتريد والتعامل معها بشكل مختلف عندما ينقر المستخدم عليها.
- قد تواجه نظامًا يحتوي على معرفات سجلات فريدة، حيث تمثل التراكبات سجلات محددة في هذا النظام.
- قد تشير بيانات التراكب إلى أولوية لتحديد مؤشر z تراكب.
التعامل مع أحداث تراكب الأرض
بشكل افتراضي، يتم تطبيق تراكبات الأرض
غير قابل للنقر. يمكنك تفعيل أو إيقاف إمكانية النقر عن طريق استدعاء
GroundOverlay.setClickable(boolean)
استخدام OnGroundOverlayClickListener
للاستماع إلى أحداث النقر على تراكب أرضي قابل للنقر. لضبط أداة الاستماع هذه على
الخريطة، الاتصال
GoogleMap.setOnGroundOverlayClickListener(OnGroundOverlayClickListener)
عندما ينقر مستخدم على تراكب أرضي، ستتلقى
معاودة الاتصال "onGroundOverlayClick(GroundOverlay)
"