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

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

مقدمة

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

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

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

Kotlin



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

      

Java


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

      

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

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
)

      

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);

      

إضافة العناصر الخاصة بك

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

Kotlin



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

      

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

      

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

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

Kotlin



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

      

Java


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

      

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

Kotlin



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

      

Java


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

      

الاطّلاع على التطبيق التجريبي

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