গুগল ম্যাপ মাল্টিলেয়ার ইউটিলিটি
সেভ করা পৃষ্ঠা গুছিয়ে রাখতে 'সংগ্রহ' ব্যবহার করুন
আপনার পছন্দ অনুযায়ী কন্টেন্ট সেভ করুন ও সঠিক বিভাগে রাখুন।
প্ল্যাটফর্ম নির্বাচন করুন: অ্যান্ড্রয়েড জাভাস্ক্রিপ্ট - ভূমিকা
- একাধিক ক্লাস্টার, KML, এবং GeoJSON স্তর যোগ করা হচ্ছে
- আপনার নিজস্ব বৈশিষ্ট্য যোগ করা হচ্ছে
- ক্লিক ইভেন্ট পরিচালনা করা
- ডেমো অ্যাপটি দেখুন
ভূমিকা
পূর্ববর্তী টিউটোরিয়ালে, আপনি শিখেছেন কিভাবে KML এবং GeoJSON থেকে আপনার মানচিত্রে বৈশিষ্ট্য যোগ করতে হয়, সেইসাথে মার্কারগুলির ক্লাস্টারগুলিও । কিন্তু আপনি যদি একই মানচিত্রে এই কয়েকটি স্তর যুক্ত করতে চান এবং প্রতিটির জন্য স্বাধীন ক্লিক ইভেন্ট পেতে চান?
একাধিক ক্লাস্টার, KML, এবং GeoJSON স্তর যোগ করা হচ্ছে
একাধিক ধরনের স্তরের জন্য ক্লিক ইভেন্ট পরিচালনা করতে সাহায্য করার জন্য লাইব্রেরিতে Manager
অবজেক্টগুলি অন্তর্ভুক্ত রয়েছে। সুতরাং, আপনি আপনার স্তরগুলি সেট আপ করার আগে আপনাকে প্রথমে এগুলিকে ইনস্ট্যান্টিয়েট করতে হবে এবং আপনার GoogleMap
এ পাস করতে হবে:
কোটলিন
val markerManager = MarkerManager(map)
val groundOverlayManager = GroundOverlayManager(map!!)
val polygonManager = PolygonManager(map)
val polylineManager = PolylineManager(map)
জাভা
MarkerManager markerManager = new MarkerManager(map);
GroundOverlayManager groundOverlayManager = new GroundOverlayManager(map);
PolygonManager polygonManager = new PolygonManager(map);
PolylineManager polylineManager = new PolylineManager(map);
এরপরে, আপনি যখন সেগুলি সেট আপ করবেন তখন আপনি এই ম্যানেজার ক্লাসগুলিকে অন্যান্য স্তরগুলির কনস্ট্রাক্টরগুলিতে পাস করতে পারেন:
কোটলিন
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
)
জাভা
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
তৈরি করুন এবং তারপরে GoogleMap
অবজেক্টে সরাসরি যুক্ত করার পরিবর্তে বৈশিষ্ট্যটি যোগ করতে Managers
ব্যবহার করুন। উদাহরণস্বরূপ, যদি আপনি একটি নতুন মার্কার যোগ করতে চান:
কোটলিন
val markerCollection =
markerManager.newCollection()
markerCollection.addMarker(
MarkerOptions()
.position(LatLng(51.150000, -0.150032))
.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE))
.title("Unclustered marker")
)
জাভা
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 লেয়ারের জন্য ক্লিক লিসেনার কিভাবে সেট আপ করবেন তা এখানে রয়েছে:
কোটলিন
kmlPolylineLayer.addLayerToMap()
kmlPolylineLayer.setOnFeatureClickListener { feature: Feature ->
Toast.makeText(context,
"KML polyline clicked: ${feature.getProperty("name")}",
Toast.LENGTH_SHORT
).show()
}
জাভা
kmlPolylineLayer.addLayerToMap();
kmlPolylineLayer.setOnFeatureClickListener(feature -> Toast.makeText(context,
"KML polyline clicked: " + feature.getProperty("name"),
Toast.LENGTH_SHORT).show());
আপনি যখন আপনার নিজস্ব মার্কার, গ্রাউন্ড ওভারলে, পলিলাইন বা বহুভুজ যোগ করেন, তখন শুধুমাত্র সেই Collection
বস্তুগুলিতে ক্লিক শ্রোতাদের যোগ করতে ভুলবেন না। উদাহরণস্বরূপ, markerCollection
মার্কার ক্লিক লিসেনার কীভাবে সেট আপ করবেন তা এখানে রয়েছে:
কোটলিন
markerCollection.setOnMarkerClickListener { marker: Marker ->
Toast.makeText(
context,
"Marker clicked: ${marker.title}",
Toast.LENGTH_SHORT
).show()
false
}
জাভা
markerCollection.setOnMarkerClickListener(marker -> { Toast.makeText(context,
"Marker clicked: " + marker.getTitle(),
Toast.LENGTH_SHORT).show();
return false;
});
ডেমো অ্যাপটি দেখুন
একাধিক স্তর যোগ করার উদাহরণের জন্য, ইউটিলিটি লাইব্রেরির সাথে পাঠানো ডেমো অ্যাপে MultiLayerDemoActivity
দেখুন। সেটআপ গাইড আপনাকে দেখায় কিভাবে ডেমো অ্যাপ চালাতে হয়।
অন্য কিছু উল্লেখ না করা থাকলে, এই পৃষ্ঠার কন্টেন্ট Creative Commons Attribution 4.0 License-এর অধীনে এবং কোডের নমুনাগুলি Apache 2.0 License-এর অধীনে লাইসেন্স প্রাপ্ত। আরও জানতে, Google Developers সাইট নীতি দেখুন। Java হল Oracle এবং/অথবা তার অ্যাফিলিয়েট সংস্থার রেজিস্টার্ড ট্রেডমার্ক।
2025-09-04 UTC-তে শেষবার আপডেট করা হয়েছে।
[null,null,["2025-09-04 UTC-তে শেষবার আপডেট করা হয়েছে।"],[[["\u003cp\u003eThis guide explains how to add and manage multiple map layers like KML, GeoJSON, and Clusters on the same map using the Maps SDK for Android Utility Library.\u003c/p\u003e\n"],["\u003cp\u003eIt covers using \u003ccode\u003eManager\u003c/code\u003e objects to handle click events for these layers and how to add your own features.\u003c/p\u003e\n"],["\u003cp\u003eClick listeners function as usual for KML, GeoJSON, and Clusters when the \u003ccode\u003eManager\u003c/code\u003e classes are passed to the layer's constructor.\u003c/p\u003e\n"],["\u003cp\u003eFor custom markers and overlays, use \u003ccode\u003eCollection\u003c/code\u003e objects and add click listeners to them for event handling.\u003c/p\u003e\n"],["\u003cp\u003eA demo app, \u003ccode\u003eMultiLayerDemoActivity\u003c/code\u003e, showcases the implementation of these concepts.\u003c/p\u003e\n"]]],[],null,["# Google Maps Multilayer Utility\n\nSelect platform: [Android](/maps/documentation/android-sdk/utility/multilayer \"View this page for the Android platform docs.\") [JavaScript](/maps/documentation/javascript/layers \"View this page for the JavaScript platform docs.\")\n\n1. [Introduction](#introduction)\n2. [Adding multiple cluster, KML, and GeoJSON layers](#add-multiple)\n3. [Adding your own features](#add-features)\n4. [Handling click events](#handle-click)\n5. [See the demo app](#demo-app)\n\nIntroduction\n------------\n\n\nIn previous tutorials, you've learned how to add features from\n[KML](/maps/documentation/android-sdk/utility/kml) and\n[GeoJSON](/maps/documentation/android-sdk/utility/geojson) to your map, as well as\n[clusters](/maps/documentation/android-sdk/utility/marker-clustering) of markers.\nBut what if you want to add several of these layers on the same map and get independent click\nevents for each?\n\nAdding multiple cluster, KML, and GeoJSON layers\n------------------------------------------------\n\n\nThe library includes `Manager`objects to help manage click events for multiple types\nof layers. So, before you set up your layers you'll first need to instantiate these and pass in\nyour `GoogleMap`: \n\n### Kotlin\n\n```kotlin\nval markerManager = MarkerManager(map)\nval groundOverlayManager = GroundOverlayManager(map!!)\nval polygonManager = PolygonManager(map)\nval polylineManager = PolylineManager(map)\n\n \n```\n\n### Java\n\n```java\nMarkerManager markerManager = new MarkerManager(map);\nGroundOverlayManager groundOverlayManager = new GroundOverlayManager(map);\nPolygonManager polygonManager = new PolygonManager(map);\nPolylineManager polylineManager = new PolylineManager(map);\n\n \n```\n\n\nNext, you can pass these manager classes into the constructors of the other layers when you\nset them up: \n\n### Kotlin\n\n```kotlin\nval clusterManager =\n ClusterManager\u003cMyItem\u003e(context, map, markerManager)\nval geoJsonLineLayer = GeoJsonLayer(\n map,\n R.raw.geojson_file,\n context,\n markerManager,\n polygonManager,\n polylineManager,\n groundOverlayManager\n)\nval kmlPolylineLayer = KmlLayer(\n map,\n R.raw.kml_file,\n context,\n markerManager,\n polygonManager,\n polylineManager,\n groundOverlayManager,\n null\n)\n\n \n```\n\n### Java\n\n```java\nClusterManager\u003cMyItem\u003e clusterManager = new ClusterManager\u003c\u003e(context, map, markerManager);\nGeoJsonLayer geoJsonLineLayer = new GeoJsonLayer(map, R.raw.geojson_file, context, markerManager, polygonManager, polylineManager, groundOverlayManager);\nKmlLayer kmlPolylineLayer = new KmlLayer(map, R.raw.kml_file, context, markerManager, polygonManager, polylineManager, groundOverlayManager, null);\n\n \n```\n\nAdding your own features\n------------------------\n\n\nIf you want to add your own markers, ground overlays, polylines, or polygons alongside these\nlayers, create your own `Collection` and then use the `Managers`\nto add the feature instead of directly adding them to the `GoogleMap` object.\n\nFor example, if you want to add a new marker: \n\n### Kotlin\n\n```kotlin\nval markerCollection =\n markerManager.newCollection()\nmarkerCollection.addMarker(\n MarkerOptions()\n .position(LatLng(51.150000, -0.150032))\n .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE))\n .title(\"Unclustered marker\")\n)\n\n \n```\n\n### Java\n\n```java\nMarkerManager.Collection markerCollection = markerManager.newCollection();\nmarkerCollection.addMarker(new MarkerOptions()\n .position(new LatLng(51.150000, -0.150032))\n .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE))\n .title(\"Unclustered marker\"));\n\n \n```\n\nHandling click events\n---------------------\n\n\nFor clusters, KML, and GeoJSON, click listeners work like normal - as long as you pass in the\n`Manager` classes in the constructor of the layer you're setting.\n\nFor example, here's how to set up a click listener for the KML layer: \n\n### Kotlin\n\n```kotlin\nkmlPolylineLayer.addLayerToMap()\nkmlPolylineLayer.setOnFeatureClickListener { feature: Feature -\u003e\n Toast.makeText(context,\n \"KML polyline clicked: ${feature.getProperty(\"name\")}\",\n Toast.LENGTH_SHORT\n ).show()\n}\n\n \n```\n\n### Java\n\n```java\nkmlPolylineLayer.addLayerToMap();\nkmlPolylineLayer.setOnFeatureClickListener(feature -\u003e Toast.makeText(context,\n \"KML polyline clicked: \" + feature.getProperty(\"name\"),\n Toast.LENGTH_SHORT).show());\n\n \n```\n\n\nWhen you add your own markers, ground overlays, polylines, or polygons, just be sure to add click\nlisteners to those `Collection` objects. For example, here's how to set up the marker\nclick listener on the `markerCollection`: \n\n### Kotlin\n\n```kotlin\nmarkerCollection.setOnMarkerClickListener { marker: Marker -\u003e\n Toast.makeText(\n context,\n \"Marker clicked: ${marker.title}\",\n Toast.LENGTH_SHORT\n ).show()\n false\n}\n\n \n```\n\n### Java\n\n```java\nmarkerCollection.setOnMarkerClickListener(marker -\u003e { Toast.makeText(context,\n \"Marker clicked: \" + marker.getTitle(),\n Toast.LENGTH_SHORT).show();\n return false;\n});\n\n \n```\n\nSee the demo app\n----------------\n\nFor an example of adding multiple layers, take a look at the `MultiLayerDemoActivity`\nin the demo app that ships with the utility library. The [setup guide](/maps/documentation/android-sdk/utility/setup) shows you how to run\nthe demo app."]]