Maps SDK for Android ব্যবহার করার জন্য আপনি প্রোজেক্ট কনফিগার করার পরে, কীভাবে Android অ্যাপে একটি প্রাথমিক ম্যাপ যোগ করতে হয় তা এই বিষয়ে বর্ণনা করা হয়েছে। ম্যাপ যোগ করার পরে, আপনি ম্যাপের ধরন ও ফিচার পরিবর্তন করতে পারবেন।
এক নজরে
Android-এর জন্য Maps SDK এমন একাধিক ক্লাস প্রদান করে যা আপনার অ্যাপ ম্যাপের লাইফসাইকেল, কার্যকারিতা ও ডেটা ম্যানেজ করতে ব্যবহার করতে পারে। ক্লাসগুলি Android UI মডেলের উপর ভিত্তি করে ব্যবহারকারীর ইন্টার্যাকশনকে সমর্থন করে, যেমন ম্যাপের প্রাথমিক অবস্থা সেট করা এবং রানটাইমে ব্যবহারকারীর কাছ থেকে জেসচার ইনপুটের উত্তর দেওয়া।
ম্যাপ ম্যানেজ করার জন্য প্রধান ইন্টারফেস ও ক্লাস:
GoogleMap— অন্তর্নিহিত ম্যাপ ফিচার ও ডেটা ম্যানেজ করার এন্ট্রি পয়েন্ট। আপনার অ্যাপ শুধুমাত্রSupportMapFragmentবাMapViewঅবজেক্ট থেকে উদ্ধার করার পরেGoogleMapঅবজেক্ট অ্যাক্সেস করতে পারে।SupportMapFragment—GoogleMapঅবজেক্টের লাইফসাইকেল ম্যানেজ করার জন্য একটি ফ্র্যাগমেন্ট।MapView— কোনও ভিউ যাGoogleMapঅবজেক্টের লাইফসাইকেল ম্যানেজ করে।OnMapReadyCallback— একটি কলব্যাক ইন্টারফেস যাGoogleMapঅবজেক্টের জন্য ইভেন্ট এবং ব্যবহারকারীর ইন্টারঅ্যাকশন ম্যানেজ করে।
একটি GoogleMap অবজেক্ট অটোমেটিক এইসব অপারেশন পারফর্ম করে:
- Google Maps পরিষেবার সাথে কানেক্ট করা হচ্ছে।
- ম্যাপ টাইল ডাউনলোড করা হচ্ছে।
- ডিভাইসের স্ক্রিনে টাইল দেখানো হচ্ছে।
- প্যান ও জুমের মতো বিভিন্ন কন্ট্রোল দেখানো।
- ম্যাপ সরিয়ে এবং জুম-ইন বা জুম-আউট করে প্যান ও জুম জেসচারের উত্তর দেওয়া।
আপনার অ্যাপে GoogleMap অবজেক্ট ব্যবহার করতে, আপনাকে অবশ্যই
SupportMapFragment বা MapView অবজেক্টকে ম্যাপের জন্য কন্টেনার অবজেক্ট হিসেবে ব্যবহার করতে হবে এবং
তারপরে কন্টেনার থেকে GoogleMap অবজেক্ট রিট্রিভ করতে হবে। কারণ কন্টেনার
ক্লাসগুলি Android ফ্র্যাগমেন্ট বা ভিউ থেকে পাওয়া যায়, সেগুলি ম্যাপকে
লাইফসাইকেল ম্যানেজমেন্ট ও Android বেস ক্লাসের UI ক্ষমতা প্রদান করে।
SupportMapFragment ক্লাস হল GoogleMap অবজেক্টের জন্য আরও আধুনিক এবং সাধারণ কন্টেনার।
কোড দেখুন
নিম্নলিখিত কোডটি এই বিষয়ে ব্যবহৃত সম্পূর্ণ Java অ্যাক্টিভিটি থেকে নেওয়া হয়েছে, যখন স্ট্যাটিক্যালি ফ্র্যাগমেন্ট যোগ করা হয়। খালি প্রোজেক্ট টেমপ্লেট থেকে Android প্রোজেক্ট তৈরি করা হয়েছে এবং তারপরে প্রোজেক্ট কনফিগারেশন গাইড অনুযায়ী আপডেট করা হয়েছে। এই বিষয়ের ধাপগুলি অনুসরণ করার পরে, আপনার কোড প্রোজেক্ট টেমপ্লেটের উপর ভিত্তি করে আলাদা হতে পারে।
package com.example.mapsetup; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.OnMapReadyCallback; import com.google.android.gms.maps.SupportMapFragment; import com.google.android.gms.maps.model.LatLng; import com.google.android.gms.maps.model.MarkerOptions; // Implement OnMapReadyCallback. public class MainActivity extends AppCompatActivity implements OnMapReadyCallback { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Set the layout file as the content view. setContentView(R.layout.activity_main); // Get a handle to the fragment and register the callback. SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() .findFragmentById(R.id.map); mapFragment.getMapAsync(this); } // Get a handle to the GoogleMap object and display marker. @Override public void onMapReady(GoogleMap googleMap) { googleMap.addMarker(new MarkerOptions() .position(new LatLng(0, 0)) .title("Marker")); } }
ম্যাপ যোগ করতে
এই বিভাগে বর্ণনা করা হয়েছে যে ম্যাপ কন্টেনার হিসেবে ফ্র্যাগমেন্ট ব্যবহার করে কীভাবে একটি বেসিক ম্যাপ যোগ করতে হয়; তবে, আপনি এর পরিবর্তে ভিউ ব্যবহার করতে পারেন। উদাহরণ হিসেবে, Github-এ RawMapViewDemoActivity দেখুন।
প্রাথমিক ধাপ:
SDK পেতে, API কী সংগ্রহ করতে এবং প্রয়োজনীয় ফ্রেমওয়ার্ক যোগ করতে, এতে উল্লেখ করা ধাপগুলি অনুসরণ করুন:
অ্যাক্টিভিটিতে এমন একটি
SupportMapFragmentঅবজেক্ট যোগ করুন যা ম্যাপ ম্যানেজ করবে। আপনি স্ট্যাটিক বা ডায়নামিক উপায়ে ফ্র্যাগমেন্ট যোগ করতে পারবেন।OnMapReadyCallbackইন্টারফেস প্রয়োগ করুন।কন্টেন্ট ভিউ হিসেবে লেআউট ফাইল সেট করুন।
আপনি যদি ফ্র্যাগমেন্টটি স্ট্যাটিক্যালি যোগ করে থাকেন, তাহলে ফ্র্যাগমেন্টের একটি হ্যান্ডেল পান।
কলব্যাক রেজিস্টার করুন।
GoogleMapঅবজেক্টের হ্যান্ডেল পান।
SupportMapFragment অবজেক্ট যোগ করা
আপনি নিজের অ্যাপে স্ট্যাটিক বা ডায়নামিক উপায়ে SupportMapFragment অবজেক্ট যোগ করতে পারেন।
সবচেয়ে সহজ উপায় হল, এটি স্ট্যাটিক হিসেবে যোগ করা। আপনি ডায়নামিক পদ্ধতিতে ফ্র্যাগমেন্ট যোগ করলে,
ফ্র্যাগমেন্টে অতিরিক্ত অ্যাকশন পারফর্ম করতে পারবেন, যেমন রানটাইমে এটি সরানো এবং
পরিবর্তন করা।
স্ট্যাটিক উপায়ে কোনও ফ্র্যাগমেন্ট যোগ করতে
যে অ্যাক্টিভিটি ম্যাপ ম্যানেজ করবে তার লেআউট ফাইলে:
fragmentএলিমেন্ট যোগ করুন।- নামের ঘোষণা যোগ করুন
xmlns:map="http://schemas.android.com/apk/res-auto". এর ফলেmapsকাস্টম XML অ্যাট্রিবিউট ব্যবহার করা যায়। fragmentএলিমেন্টে,android:nameঅ্যাট্রিবিউটকেcom.google.android.gms.maps.SupportMapFragmentহিসেবে সেট করুন।fragmentএলিমেন্টে,android:idঅ্যাট্রিবিউট যোগ করুন এবং এটিকে R.id.map রিসোর্স আইডি (@+id/map) হিসেবে সেট করুন।
যেমন, এখানে একটি সম্পূর্ণ লেআউট ফাইল দেওয়া হল যাতে fragment এলিমেন্ট আছে:
<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:map="http://schemas.android.com/apk/res-auto"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
ডায়নামিক উপায়ে কোনও ফ্র্যাগমেন্ট যোগ করতে
অ্যাক্টিভিটিতে:
- একটি
SupportMapFragmentইনস্ট্যান্স তৈরি করুন। - অ্যাক্টিভিটিতে ফ্র্যাগমেন্ট যোগ করে এমন ট্রানজ্যাকশন কমিট করুন। আরও তথ্যের জন্য, ফ্র্যাগমেন্ট ট্রানজ্যাকশন দেখুন।
যেমন:
Kotlin
if (context is FragmentActivity) { val mapFragment = SupportMapFragment.newInstance() context.supportFragmentManager .beginTransaction() .add(com.example.snippets.common.R.id.map_container, mapFragment) .commit() }
Java
SupportMapFragment mapFragment = SupportMapFragment.newInstance(); FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); fragmentTransaction.add(R.id.map_container, mapFragment); fragmentTransaction.commit();
OnMapReadyCallback ইন্টারফেস প্রয়োগ করুন
নিম্নলিখিতভাবে অ্যাক্টিভিটি ঘোষণা আপডেট করুন:
Kotlin
class MainActivity : AppCompatActivity(), OnMapReadyCallback { // ... }
Java
class MainActivity extends AppCompatActivity implements OnMapReadyCallback { // ... }
কন্টেন্ট ভিউ সেট করা
আপনার অ্যাক্টিভিটির onCreate পদ্ধতিতে, setContentView পদ্ধতি কল করুন এবং লেআউট ফাইলকে কন্টেন্ট ভিউ হিসেবে সেট করুন।
যেমন, লেআউট ফাইলের নাম main.xml হলে:
Kotlin
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.main) }
Java
@Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); }
ফ্র্যাগমেন্টের হ্যান্ডেল পান এবং কলব্যাক রেজিস্টার করুন
ফ্র্যাগমেন্টের হ্যান্ডেল পেতে,
FragmentManager.findFragmentByIdমেথড কল করুন এবং আপনার লেআউট ফাইলে ফ্র্যাগমেন্টের রিসোর্স আইডি এতে পাস করুন। আপনি যদি ডায়নামিক্যালি ফ্র্যাগমেন্ট যোগ করে থাকেন, তাহলে এই ধাপটি এড়িয়ে যান কারণ আপনি আগেই হ্যান্ডেল ফিরিয়ে এনেছেন।ফ্র্যাগমেন্টে কলব্যাক সেট করতে
getMapAsyncমেথড কল করুন।
যেমন, আপনি যদি স্ট্যাটিক পদ্ধতিতে ফ্র্যাগমেন্ট যোগ করে থাকেন:
Kotlin
val mapFragment = supportFragmentManager .findFragmentById(R.id.map) as SupportMapFragment mapFragment.getMapAsync(this)
Java
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() .findFragmentById(R.id.map); mapFragment.getMapAsync(this);
GoogleMap অবজেক্টের হ্যান্ডেল পান
GoogleMapঅবজেক্টের হ্যান্ডেল পেতে onMapReady কলব্যাক পদ্ধতি ব্যবহার করুন। ব্যবহারকারীর ইনপুট পাওয়ার জন্য ম্যাপ রেডি হয়ে গেলে কলব্যাক ট্রিগার করা হয়। এটি GoogleMap ক্লাসের একটি নন-নাল ইনস্ট্যান্স প্রদান করে যা আপনি
ম্যাপ আপডেট করতে ব্যবহার করতে পারেন।
এই উদাহরণে, onMapReady কলব্যাক GoogleMap অবজেক্টের জন্য একটি হ্যান্ডেল ফিরিয়ে আনে এবং তারপর ম্যাপে একটি মার্কার যোগ করা হয়:
Kotlin
override fun onMapReady(googleMap: GoogleMap) { googleMap.addMarker( MarkerOptions() .position(LatLng(0.0, 0.0)) .title("Marker") ) }
Java
@Override public void onMapReady(GoogleMap googleMap) { googleMap.addMarker(new MarkerOptions() .position(new LatLng(0, 0)) .title("Marker")); }

আপনি অ্যাপটি সফলভাবে তৈরি করে রান করলে, এটি Null Island-এ (শূন্য ডিগ্রি অক্ষাংশ এবং শূন্য ডিগ্রি দ্রাঘিমাংশ) একটি মার্কার সহ একটি ম্যাপ দেখাবে।
সম্পূর্ণ অ্যাক্টিভিটির কোড দেখুন:
এর পরে কী করতে হবে
এইসব ধাপ সম্পূর্ণ করার পরে, আপনি ম্যাপ সেটিংস কনফিগার করতে পারবেন।