أداة متعددة الطبقات في خرائط Google

اختَر النظام الأساسي: Android JavaScript
  1. مقدمة
  2. إضافة طبقات متعددة بتنسيق KML وGeoJSON
  3. إضافة الميزات الخاصة بك
  4. التعامل مع أحداث النقر
  5. الاطّلاع على التطبيق التجريبي

مقدمة

وفي البرامج التعليمية السابقة، تعرّفت على كيفية إضافة ميزات من KML وGeoJSON إلى خريطتك، بالإضافة إلى مجموعات من العلامات. ماذا لو كنت تريد إضافة العديد من هذه الطبقات على الخريطة نفسها والحصول على أحداث نقرات مستقلة لكل منها؟

إضافة طبقات متعددة KML وKML وGeoJSON

تتضمّن المكتبة Managerكائنات للمساعدة في إدارة أحداث النقرات لأنواع متعددة من الطبقات. قبل إعداد الطبقات، يجب أولاً إنشاء مثيل لها وتمرير GoogleMap:

Java


MarkerManager markerManager = new MarkerManager(map);
GroundOverlayManager groundOverlayManager = new GroundOverlayManager(map);
PolygonManager polygonManager = new PolygonManager(map);
PolylineManager polylineManager = new PolylineManager(map);

      

Kotlin


val markerManager = MarkerManager(map)
val groundOverlayManager = GroundOverlayManager(map!!)
val polygonManager = PolygonManager(map)
val polylineManager = PolylineManager(map)

      

بعد ذلك، يمكنك تمرير هذه الصفوف الإدارية إلى أدوات إنشاء الطبقات الأخرى عند إعدادها:

Java


ClusterManager<MyItem> clusterManager = new ClusterManager<>(context, map, markerManager);
GeoJsonLayer geoJsonLineLayer = new GeoJsonLayer(map, R.raw.geojson_file, context, markerManager, polygonManager, polylineManager, groundOverlayManager);
KmlLayer kmlPolylineLayer = new KmlLayer(map, R.raw.kml_file, context, markerManager, polygonManager, polylineManager, groundOverlayManager, null);

      

Kotlin


val clusterManager =
    ClusterManager<MyItem>(context, map, markerManager)
val geoJsonLineLayer = GeoJsonLayer(
    map,
    R.raw.geojson_file,
    context,
    markerManager,
    polygonManager,
    polylineManager,
    groundOverlayManager
)
val kmlPolylineLayer = KmlLayer(
    map,
    R.raw.kml_file,
    context,
    markerManager,
    polygonManager,
    polylineManager,
    groundOverlayManager,
    null
)

      

إضافة ميزاتك الخاصة

إذا أردت إضافة علاماتك الخاصة أو تراكبات الأرض أو الخطوط المتعددة أو المضلعات مع هذه الطبقات، يمكنك إنشاء Collection الخاص بك ثم استخدام Managers لإضافة الميزة بدلاً من إضافتها مباشرةً إلى الكائن GoogleMap. على سبيل المثال، إذا كنت تريد إضافة علامة جديدة:

Java


MarkerManager.Collection markerCollection = markerManager.newCollection();
markerCollection.addMarker(new MarkerOptions()
    .position(new LatLng(51.150000, -0.150032))
    .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE))
    .title("Unclustered marker"));

      

Kotlin


val markerCollection =
    markerManager.newCollection()
markerCollection.addMarker(
    MarkerOptions()
        .position(LatLng(51.150000, -0.150032))
        .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE))
        .title("Unclustered marker")
)

      

التعامل مع أحداث النقر

بالنسبة إلى المجموعات وKML وGeoJSON، انقر على المستمعين يعملون كالمعتاد، ما دامت تتجاوز دروس Manager في مُنشئ الطبقة التي تضبطها. على سبيل المثال، إليك كيفية إعداد أداة معالجة للنقر على طبقة KML:

Java


kmlPolylineLayer.addLayerToMap();
kmlPolylineLayer.setOnFeatureClickListener(feature -> Toast.makeText(context,
    "KML polyline clicked: " + feature.getProperty("name"),
    Toast.LENGTH_SHORT).show());

      

Kotlin


kmlPolylineLayer.addLayerToMap()
kmlPolylineLayer.setOnFeatureClickListener { feature: Feature ->
    Toast.makeText(context,
        "KML polyline clicked: ${feature.getProperty("name")}",
        Toast.LENGTH_SHORT
    ).show()
}

      

عند إضافة العلامات الخاصة بك أو تراكبات الأرض أو الخطوط المتعددة أو المضلعات، تأكد من إضافة مستمعي النقرات إلى عناصر Collection هذه. على سبيل المثال، في ما يلي طريقة إعداد أداة الاستماع على النقر على markerCollection:

Java


markerCollection.setOnMarkerClickListener(marker -> { Toast.makeText(context,
    "Marker clicked: " + marker.getTitle(),
        Toast.LENGTH_SHORT).show();
    return false;
});

      

Kotlin


markerCollection.setOnMarkerClickListener { marker: Marker ->
    Toast.makeText(
        context,
        "Marker clicked: ${marker.title}",
        Toast.LENGTH_SHORT
    ).show()
    false
}

      

عرض التطبيق التجريبي

للاطّلاع على مثال حول إضافة طبقات متعدّدة، يمكنك الاطّلاع على MultiLayerDemoActivity في التطبيق التجريبي الذي يتم شحنه مع مكتبة الأدوات. يوضّح لك دليل الإعداد كيفية تشغيل التطبيق التجريبي.