تراكبات الأرض

اختيار النظام الأساسي: نظام التشغيل Android iOS JavaScript

تراكبات الأرض هي تراكبات صور مرتبطة بخط العرض/الطول والإحداثيات، بحيث تتحرك عند سحب أو تكبير/تصغير الخريطة.

عيّنات تعليمات برمجية

يضم مستودع ApiDemos على GitHub نموذج يوضح تراكبات الأرض:

مقدمة

تراكب الأرض هو صورة يتم تثبيتها على الخريطة. على عكس العلامات، الأرض يتم توجيه التراكبات على سطح الأرض بدلاً من الشاشة، يؤدي تدوير الخريطة أو إمالتها أو تكبيرها/تصغيرها إلى تغيير اتجاه الصورة. تراكبات الأرض مفيدة عندما تريد إصلاح صورة واحدة في منطقة واحدة على الخريطة. إذا كنت ترغب في إضافة صور شاملة تغطي جزءًا كبيرًا من على الخريطة، فينبغي أن تضع في اعتبارك تراكب الصور.

إضافة تراكب

لإضافة GroundOverlay، عليك إنشاء كائن GroundOverlayOptions يعرّف كلاً من الصورة والموضع. يمكنك اختياريًا تحديد إعدادات إضافية يؤثر على موضع الصورة على الخريطة. بمجرد تحديد الخيارات اللازمة، مرِّر الكائن إلى GoogleMap.addGroundOverlay(). لإضافة الصورة إلى الخريطة. تُرجع الطريقة addGroundOverlay() كائن GroundOverlay يجب أن تحتفظ بمرجع هذا الكائن إذا كنت تريد تعديله لاحقًا.

الخطوات بالتفصيل:

  1. إنشاء مثيل لعنصر GroundOverlayOptions جديد
  2. حدِّد الصورة على أنّها BitmapDescriptor.
  3. يمكنك ضبط موضع الصورة باستخدام إحدى الطرق المتاحة:
    • position(LatLng location, float width, float height)
    • position(LatLng location, float width)
    • positionFromBounds(LatLngBounds bounds)
  4. اضبط أي سمات اختيارية، مثل transparency على النحو المطلوب.
  5. يمكنك طلب 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 = "Sydney"

      

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("Sydney");

      

في ما يلي بعض الأمثلة على السيناريوهات التي يكون فيها تخزين البيانات واستردادها مفيدًا. بتراكبات أرضية:

  • قد يلبي التطبيق ركائز أرض مختلفة، وتريد والتعامل معها بشكل مختلف عندما ينقر المستخدم عليها.
  • قد تواجه نظامًا يحتوي على معرفات سجلات فريدة، حيث تمثل التراكبات سجلات محددة في هذا النظام.
  • قد تشير بيانات التراكب إلى أولوية لتحديد مؤشر z تراكب.

التعامل مع أحداث تراكب الأرض

بشكل افتراضي، يتم تطبيق تراكبات الأرض غير قابل للنقر. يمكنك تفعيل أو إيقاف إمكانية النقر عن طريق استدعاء GroundOverlay.setClickable(boolean)

استخدام OnGroundOverlayClickListener من أجل الاستماع إلى أحداث النقر على طبقة أساسية قابلة للنقر. لضبط أداة الاستماع هذه على الخريطة، الاتصال GoogleMap.setOnGroundOverlayClickListener(OnGroundOverlayClickListener) عندما ينقر مستخدم على تراكب أرضي، ستتلقى معاودة الاتصال "onGroundOverlayClick(GroundOverlay)"