أداة متعددة الطبقات في خرائط 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. في التطبيق التجريبي المزود بمكتبة المرافق. ويوضّح لك دليل الإعداد كيفية تشغيل التطبيق التجريبي.