
গ্রাউন্ড ওভারলে হলো এমন ইমেজ ওভারলে যা অক্ষাংশ/দ্রাঘিমাংশ স্থানাঙ্কের সাথে সংযুক্ত থাকে, ফলে ম্যাপ ড্র্যাগ বা জুম করলে এগুলোও সরে যায়।
কোড নমুনা
গিটহাবের ApiDemos রিপোজিটরিতে একটি নমুনা রয়েছে যা গ্রাউন্ড ওভারলে প্রদর্শন করে:
- GroundOverlayDemoActivity - Java : জাভাতে গ্রাউন্ড ওভারলে বৈশিষ্ট্য এবং লিসেনার
- GroundOverlayDemoActivity - Kotlin : কোটলিনে গ্রাউন্ড ওভারলে বৈশিষ্ট্য এবং লিসেনার
ভূমিকা
গ্রাউন্ড ওভারলে হলো একটি ছবি যা একটি মানচিত্রে স্থির করা থাকে। মার্কারের মতো নয়, গ্রাউন্ড ওভারলে স্ক্রিনের পরিবর্তে পৃথিবীর পৃষ্ঠের সাপেক্ষে বিন্যস্ত থাকে, তাই মানচিত্র ঘোরানো, কাত করা বা জুম করলে ছবিটির বিন্যাস পরিবর্তিত হয়ে যায়। যখন আপনি মানচিত্রের কোনো একটি নির্দিষ্ট স্থানে একটিমাত্র ছবি স্থির রাখতে চান, তখন গ্রাউন্ড ওভারলে বেশ কার্যকর। যদি আপনি মানচিত্রের একটি বড় অংশ জুড়ে বিস্তৃত চিত্রাবলী যোগ করতে চান, তবে আপনার একটি টাইল ওভারলে ব্যবহার করার কথা বিবেচনা করা উচিত।
একটি ওভারলে যোগ করুন
একটি GroundOverlay যোগ করতে, একটি GroundOverlayOptions অবজেক্ট তৈরি করুন যা একটি ছবি এবং একটি অবস্থান উভয়ই নির্ধারণ করে। আপনি ঐচ্ছিকভাবে অতিরিক্ত সেটিংস নির্দিষ্ট করতে পারেন যা মানচিত্রে ছবির অবস্থানকে প্রভাবিত করবে। প্রয়োজনীয় অপশনগুলো নির্ধারণ করার পর, মানচিত্রে ছবিটি যোগ করার জন্য অবজেক্টটি GoogleMap.addGroundOverlay() মেথডে পাস করুন। addGroundOverlay() মেথডটি একটি GroundOverlay অবজেক্ট রিটার্ন করে; আপনি যদি পরে এটি পরিবর্তন করতে চান তবে এই অবজেক্টটির একটি রেফারেন্স সংরক্ষণ করা উচিত।
ধাপে ধাপে:
- একটি নতুন
GroundOverlayOptionsঅবজেক্ট ইনস্ট্যানশিয়েট করুন - ইমেজটিকে
BitmapDescriptorহিসেবে নির্দিষ্ট করুন। - উপলব্ধ পদ্ধতিগুলোর মধ্যে যেকোনো একটি ব্যবহার করে ছবিটির অবস্থান নির্ধারণ করুন:
-
position(LatLng location, float width, float height) -
position(LatLng location, float width) -
positionFromBounds(LatLngBounds bounds)
-
- ইচ্ছামত
transparencyমতো যেকোনো ঐচ্ছিক বৈশিষ্ট্য সেট করুন। - ম্যাপে ছবিটি যোগ করতে
GoogleMap.addGroundOverlay()কল করুন।
নিচের উদাহরণটিতে দেখানো হয়েছে, কীভাবে একটি বিদ্যমান GoogleMap অবজেক্টে ভূমির ওভারলে যোগ করতে হয়।
কোটলিন
val newarkLatLng = LatLng(40.714086, -74.228697) val newarkMap = GroundOverlayOptions() .image(BitmapDescriptorFactory.fromResource(R.drawable.newark_nj_1922)) .position(newarkLatLng, 8600f, 6500f) map.addGroundOverlay(newarkMap)
জাভা
LatLng newarkLatLng = new LatLng(40.714086, -74.228697); GroundOverlayOptions newarkMap = new GroundOverlayOptions() .image(BitmapDescriptorFactory.fromResource(R.drawable.newark_nj_1922)) .position(newarkLatLng, 8600f, 6500f); map.addGroundOverlay(newarkMap);
মানচিত্রে কোনো গ্রাউন্ড ওভারলে যোগ করার পর যদি আপনি তা পরিবর্তন বা অপসারণ করতে চান, তাহলে GroundOverlay অবজেক্টটি অবশ্যই সংরক্ষণ করুন। পরবর্তীতে এই অবজেক্টটিতে পরিবর্তন এনে আপনি ওভারলেটি পরিমার্জন করতে পারবেন।
কোটলিন
// Add an overlay to the map, retaining a handle to the GroundOverlay object. val imageOverlay = map.addGroundOverlay(newarkMap)
জাভা
// Add an overlay to the map, retaining a handle to the GroundOverlay object. GroundOverlay imageOverlay = map.addGroundOverlay(newarkMap);
একটি ওভারলে সরান
আপনি GroundOverlay.remove() মেথড ব্যবহার করে একটি গ্রাউন্ড ওভারলে মুছে ফেলতে পারেন।
কোটলিন
imageOverlay?.remove()
জাভা
imageOverlay.remove();
একটি ওভারলে পরিবর্তন করুন
ম্যাপে গ্রাউন্ড ওভারলে ইমেজ যোগ করার পর আপনি GroundOverlay.setImage(BitmapDescriptor) মেথডটি ব্যবহার করে তা পরিবর্তন করতে পারেন।
কোটলিন
// Update the GroundOverlay with a new image of the same dimension imageOverlay?.setImage(BitmapDescriptorFactory.fromResource(R.drawable.newark_nj_1922))
জাভা
// Update the GroundOverlay with a new image of the same dimension imageOverlay.setImage(BitmapDescriptorFactory.fromResource(R.drawable.newark_nj_1922));
setImage() মেথডটি বিদ্যমান ছবিটিকে একই আকারের অন্য একটি ছবি দিয়ে প্রতিস্থাপন করবে।
একটি গ্রাউন্ড ওভারলে স্থাপন করুন
গ্রাউন্ড ওভারলে-এর অবস্থান নির্দিষ্ট করার দুটি উপায় রয়েছে:
- ওভারলেটিকে কেন্দ্রে স্থাপন করার জন্য
LatLngএবং ছবির আকার নির্দিষ্ট করার জন্য মিটারে মাত্রা ব্যবহার করা হয়। - ছবির উত্তর-পূর্ব এবং দক্ষিণ-পশ্চিম কোণ নির্দিষ্ট করতে
LatLngBoundsব্যবহার করা হয়।
মানচিত্রে গ্রাউন্ড ওভারলে যোগ করার আগে আপনাকে অবশ্যই এর অবস্থান নির্দিষ্ট করতে হবে।
একটি ছবির অবস্থান নির্ধারণ করতে লোকেশন ব্যবহার করুন
ছবিটি যোগ করার সময় আপনাকে একটি অক্ষাংশ-দ্রাঘিমাংশ (LatLng) নির্দিষ্ট করতে হয়, যেখানে অ্যাঙ্করটি স্থির থাকবে, এবং ওভারলেটির প্রস্থ (মিটারে) উল্লেখ করতে হয়। ডিফল্টরূপে anchor ছবির কেন্দ্রে থাকে। আপনি চাইলে ওভারলেটির উচ্চতাও (মিটারে) দিতে পারেন। যদি আপনি ওভারলেটির উচ্চতা উল্লেখ না করেন, তবে ছবির আনুপাতিকতা বজায় রাখার জন্য এটি স্বয়ংক্রিয়ভাবে গণনা করা হবে।
নিচের কোডটি 40.714086, -74.228697 অবস্থানে 8.6 কিমি চওড়া এবং 6.5 কিমি উঁচু একটি ছবি স্থাপন করে। ছবিটি নীচে বাম দিকে অ্যাঙ্কর করা আছে।
কোটলিন
val newarkMap = GroundOverlayOptions() .image(BitmapDescriptorFactory.fromResource(R.drawable.newark_nj_1922)) .anchor(0f, 1f) .position(LatLng(40.714086, -74.228697), 8600f, 6500f)
জাভা
GroundOverlayOptions newarkMap = new GroundOverlayOptions() .image(BitmapDescriptorFactory.fromResource(R.drawable.newark_nj_1922)) .anchor(0, 1) .position(new LatLng(40.714086, -74.228697), 8600f, 6500f);
একটি ছবির অবস্থান নির্ধারণ করতে LatLngBounds ব্যবহার করুন।
আপনি একটি LatLngBounds প্রদান করেন, যার মধ্যে ছবিটি থাকে। এই LatLngBounds ছবিটির উত্তর-পূর্ব এবং দক্ষিণ-পশ্চিম কোণ নির্ধারণ করে। যখন ছবিটি মানচিত্রে আঁকা হয়, তখন এটি সীমানার সাথে মানানসই করার জন্য ঘোরানো হবে। যদি সীমানাগুলো মূল আকৃতির অনুপাতের সাথে না মেলে, তবে ছবিটি বেঁকে যাবে।
নিচের কোডটি ম্যাপের উপর একটি ছবি স্থাপন করে, যার দক্ষিণ-পশ্চিম কোণা 40.712216,-74.22655 এবং উত্তর-পূর্ব কোণা 40.773941, -74.12544 স্থানাঙ্কের সাথে আবদ্ধ থাকে।
কোটলিন
val newarkBounds = LatLngBounds( LatLng(40.712216, -74.22655), // South west corner LatLng(40.773941, -74.12544) // North east corner ) val newarkMap = GroundOverlayOptions() .image(BitmapDescriptorFactory.fromResource(R.drawable.newark_nj_1922)) .positionFromBounds(newarkBounds)
জাভা
LatLngBounds newarkBounds = new LatLngBounds( new LatLng(40.712216, -74.22655), // South west corner new LatLng(40.773941, -74.12544)); // North east corner GroundOverlayOptions newarkMap = new GroundOverlayOptions() .image(BitmapDescriptorFactory.fromResource(R.drawable.newark_nj_1922)) .positionFromBounds(newarkBounds);
গ্রাউন্ড ওভারলে-এর সাথে ডেটা সংযুক্ত করুন
আপনি GroundOverlay.setTag() কল করে একটি গ্রাউন্ড ওভারলে সহ যেকোনো ডেটা অবজেক্ট সংরক্ষণ করতে পারেন এবং GroundOverlay.getTag() ব্যবহার করে ডেটা অবজেক্টটি পুনরুদ্ধার করতে পারেন।
নিম্নলিখিত কোড নমুনাটি একটি গ্রাউন্ড ওভারলে সহ একটি স্ট্রিং বিবরণ সংরক্ষণ করে:
কোটলিন
val sydneyGroundOverlay = map.addGroundOverlay( GroundOverlayOptions() .image(BitmapDescriptorFactory.fromResource(R.drawable.harbour_bridge)) .position(LatLng(-33.873, 151.206), 100f) .clickable(true) ) sydneyGroundOverlay?.tag = "Sydney"
জাভা
GroundOverlay sydneyGroundOverlay = map.addGroundOverlay(new GroundOverlayOptions() .image(BitmapDescriptorFactory.fromResource(R.drawable.harbour_bridge)) .position(new LatLng(-33.873, 151.206), 100) .clickable(true)); sydneyGroundOverlay.setTag("Sydney");
এমন কিছু পরিস্থিতির উদাহরণ নিচে দেওয়া হলো, যখন গ্রাউন্ড ওভারলে ব্যবহার করে ডেটা সংরক্ষণ ও পুনরুদ্ধার করা উপযোগী হতে পারে:
- আপনার অ্যাপে বিভিন্ন ধরনের গ্রাউন্ড ওভারলে থাকতে পারে, এবং ব্যবহারকারী সেগুলিতে ক্লিক করলে আপনি সেগুলির সাথে ভিন্ন আচরণ করতে চান।
- আপনি এমন কোনো সিস্টেম ব্যবহার করতে পারেন যেখানে অনন্য রেকর্ড শনাক্তকারী রয়েছে এবং ওভারলেগুলো সেই সিস্টেমের নির্দিষ্ট রেকর্ডগুলোকে উপস্থাপন করে।
- ওভারলে ডেটা ওভারলের জন্য z-সূচক নির্ধারণের একটি অগ্রাধিকার নির্দেশ করতে পারে।
গ্রাউন্ড ওভারলে ইভেন্টগুলি পরিচালনা করুন
ডিফল্টরূপে, গ্রাউন্ড ওভারলে ক্লিকযোগ্য নয়। আপনি GroundOverlay.setClickable(boolean) কল করে এর ক্লিকযোগ্যতা সক্রিয় বা নিষ্ক্রিয় করতে পারেন।
ক্লিকযোগ্য গ্রাউন্ড ওভারলে-তে ক্লিক ইভেন্ট শোনার জন্য একটি OnGroundOverlayClickListener ব্যবহার করুন। ম্যাপে এই লিসেনারটি সেট করতে, GoogleMap.setOnGroundOverlayClickListener(OnGroundOverlayClickListener) কল করুন। যখন কোনো ব্যবহারকারী গ্রাউন্ড ওভারলে-তে ক্লিক করেন, তখন আপনি একটি onGroundOverlayClick(GroundOverlay) কলব্যাক পাবেন।