- المقدمة
- إضافة طبقات متعددة من المجموعات العنقودية وملفات KML وGeoJSON
- إضافة الميزات الخاصة بك
- التعامل مع أحداث النقر
- الاطّلاع على التطبيق التجريبي
مقدمة
في البرامج التعليمية السابقة، تعلمت كيفية إضافة ميزات من 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
في التطبيق التجريبي الذي يتم تضمينه مع مكتبة الأدوات. يوضِّح لك دليل الإعداد كيفية تشغيل التطبيق التجريبي.