অ্যাডভান্সড অ্যান্ড্রয়েড 09.1: গুগল ম্যাপ

১. স্বাগতম

এই কোডল্যাবটি গুগল ডেভেলপারস ট্রেনিং টিম দ্বারা তৈরি অ্যাডভান্সড অ্যান্ড্রয়েড ডেভেলপমেন্ট প্রশিক্ষণ কোর্সের অংশ । আপনি যদি ধারাবাহিকভাবে কোডল্যাবগুলি পরীক্ষা করেন তবে এই কোর্স থেকে সর্বাধিক সুবিধা পাবেন।

কোর্স সম্পর্কে সম্পূর্ণ বিবরণের জন্য, অ্যাডভান্সড অ্যান্ড্রয়েড ডেভেলপমেন্ট ওভারভিউ দেখুন

ভূমিকা

গুগল ম্যাপ ব্যবহার করে অ্যাপ তৈরি করলে আপনি আপনার অ্যাপে স্যাটেলাইট ইমেজ, শক্তিশালী ইউআই নিয়ন্ত্রণ, অবস্থান ট্র্যাকিং এবং অবস্থান চিহ্নিতকারীর মতো বৈশিষ্ট্য যুক্ত করতে পারবেন। আপনি আপনার নিজস্ব ডেটা সেট থেকে তথ্য, যেমন সুপরিচিত মাছ ধরা বা আরোহণের জায়গাগুলির অবস্থানগুলি দেখিয়ে স্ট্যান্ডার্ড গুগল ম্যাপে মূল্য যোগ করতে পারেন। আপনি বাস্তব জগতের সাথে সম্পর্কিত গেমও তৈরি করতে পারেন, যেমন পোকেমন গো।

এই ব্যবহারিক পদ্ধতিতে, আপনি Wander নামে একটি গুগল ম্যাপস অ্যাপ তৈরি করবেন।

আপনার যা ইতিমধ্যেই জানা উচিত

আপনার পরিচিত হওয়া উচিত:

  • গুগল ম্যাপের মৌলিক কার্যকারিতা।
  • রানটাইম অনুমতি।
  • অ্যান্ড্রয়েড স্টুডিওতে অ্যাপ তৈরি, তৈরি এবং চালানো।
  • আপনার build.gradle ফাইলে বহিরাগত লাইব্রেরি অন্তর্ভুক্ত করা।

তুমি কি শিখবে

  • আপনার অ্যাপে একটি গুগল ম্যাপ ইন্টিগ্রেট করুন।
  • বিভিন্ন ধরণের মানচিত্র প্রদর্শন করুন।
  • গুগল ম্যাপ স্টাইল করুন।
  • আপনার মানচিত্রে মার্কার যোগ করুন।
  • ব্যবহারকারীকে আগ্রহের স্থানে (POI) একটি মার্কার স্থাপন করতে সক্ষম করুন।
  • অবস্থান ট্র্যাকিং সক্ষম করুন।
  • গুগল স্ট্রিট ভিউ সক্ষম করুন।

তুমি কি করবে

  • গুগল এপিআই কনসোল থেকে একটি এপিআই কী পান এবং আপনার অ্যাপে কীটি নিবন্ধন করুন।
  • Wander অ্যাপ তৈরি করুন, যাতে একটি এমবেডেড গুগল ম্যাপ থাকবে।
  • আপনার অ্যাপে কাস্টম বৈশিষ্ট্য যোগ করুন যেমন মার্কার, স্টাইলিং এবং অবস্থান ট্র্যাকিং।
  • আপনার অ্যাপে লোকেশন ট্র্যাকিং এবং রাস্তার দৃশ্য সক্ষম করুন।

2. অ্যাপ ওভারভিউ

এই ব্যবহারিক পদ্ধতিতে আপনি Wander অ্যাপ তৈরি করেন, যা একটি স্টাইল করা গুগল ম্যাপ। Wander অ্যাপ আপনাকে লোকেশনে মার্কার ড্রপ করতে, রিয়েল টাইমে আপনার লোকেশন দেখতে এবং স্ট্রিট ভিউ প্যানোরামা দেখতে দেয়।

একটি স্টাইল করা গুগল ম্যাপ

একটি অ্যান্ড্রয়েড অ্যাপে গুগল স্ট্রিট ভিউ

৩. কাজ ১. প্রকল্পটি সেট আপ করুন এবং একটি API কী পান

Google Maps API, Places API-এর মতো, একটি API কী প্রয়োজন। API কী পেতে, আপনাকে Google API কনসোলে আপনার প্রকল্পটি নিবন্ধন করতে হবে। API কীটি একটি ডিজিটাল সার্টিফিকেটের সাথে সংযুক্ত থাকে যা অ্যাপটিকে এর লেখকের সাথে লিঙ্ক করে। ডিজিটাল সার্টিফিকেট ব্যবহার এবং আপনার অ্যাপে স্বাক্ষর করার বিষয়ে আরও জানতে, Sign Your App দেখুন।

এই ব্যবহারিক পদ্ধতিতে, আপনি ডিবাগ সার্টিফিকেটের জন্য API কী ব্যবহার করেন। ডিবাগ সার্টিফিকেটটি ডিজাইনের দিক থেকে অনিরাপদ, যেমনটি "আপনার ডিবাগ বিল্ড সাইন করুন" এ বর্ণিত হয়েছে। প্রকাশিত অ্যান্ড্রয়েড অ্যাপগুলি যারা Google Maps API ব্যবহার করে তাদের জন্য দ্বিতীয় API কী প্রয়োজন: রিলিজ সার্টিফিকেটের জন্য কী। রিলিজ সার্টিফিকেট পাওয়ার বিষয়ে আরও তথ্যের জন্য, Get API Key দেখুন।

অ্যান্ড্রয়েড স্টুডিওতে একটি গুগল ম্যাপস অ্যাক্টিভিটি টেমপ্লেট রয়েছে, যা সহায়ক টেমপ্লেট কোড তৈরি করে। টেমপ্লেট কোডে একটি google_maps_api.xml ফাইল রয়েছে যার একটি লিঙ্ক রয়েছে যা একটি API কী প্রাপ্তিকে সহজ করে তোলে।

১.১ ম্যাপস টেমপ্লেট ব্যবহার করে ওয়ান্ডার প্রকল্প তৈরি করুন

  1. একটি নতুন অ্যান্ড্রয়েড স্টুডিও প্রকল্প তৈরি করুন।
  2. নতুন অ্যাপটির নাম "ওয়ান্ডার" রাখুন। " অ্যাক্টিভিটি যোগ করুন" পৃষ্ঠায় না পৌঁছানো পর্যন্ত ডিফল্ট মানগুলি গ্রহণ করুন।
  3. গুগল ম্যাপস অ্যাক্টিভিটি টেমপ্লেটটি নির্বাচন করুন।
  4. ডিফল্ট Activity Name এবং Layout Name ছেড়ে দিন।
  5. শিরোনামটি "Wander" এ পরিবর্তন করুন এবং Finish এ ক্লিক করুন।

অ্যান্ড্রয়েড স্টুডিও বেশ কয়েকটি মানচিত্র-সম্পর্কিত অতিরিক্ত ফাইল তৈরি করে:

গুগল_ম্যাপ_এপিআই**.এক্সএমএল**

এই কনফিগারেশন ফাইলটি ব্যবহার করে আপনি আপনার API কী ধরে রাখতে পারেন। টেমপ্লেটটি দুটি google_maps_api.xml ফাইল তৈরি করে: একটি ডিবাগের জন্য এবং একটি রিলিজের জন্য। ডিবাগ সার্টিফিকেটের জন্য API কী ফাইলটি src/debug/res/values ​​এ অবস্থিত। রিলিজ সার্টিফিকেটের জন্য API কী ফাইলটি src/release/res/values ​​এ অবস্থিত। এই ব্যবহারিক পদ্ধতিতে আমরা কেবল ডিবাগ সার্টিফিকেট ব্যবহার করি।

অ্যাক্টিভিটি_ম্যাপস.এক্সএমএল

এই লেআউট ফাইলটিতে একটি একক টুকরো রয়েছে যা পুরো স্ক্রিনটি পূরণ করে। SupportMapFragment ক্লাসটি Fragment ক্লাসের একটি সাবক্লাস। আপনি যেকোনো ViewGroup<fragment> ট্যাগ ব্যবহার করে একটি লেআউট ফাইলে SupportMapFragment অন্তর্ভুক্ত করতে পারেন, অতিরিক্ত বৈশিষ্ট্য সহ:

android:name="com.google.android.gms.maps.SupportMapFragment"

MapsActivity.java সম্পর্কে

MapsActivity.java ফাইলটি SupportMapFragment ক্লাসটি ইনস্ট্যান্ট করে এবং Google Map প্রস্তুত করার জন্য ক্লাসের getMapAsync() পদ্ধতি ব্যবহার করে। SupportMapFragment ধারণকারী অ্যাক্টিভিটিতে OnMapReadyCallback ইন্টারফেস এবং সেই ইন্টারফেসের onMapReady() পদ্ধতিটি প্রয়োগ করতে হবে। getMapAsync() পদ্ধতিটি একটি GoogleMap অবজেক্ট ফেরত দেয়, যা নির্দেশ করে যে মানচিত্রটি লোড হয়েছে।

১.২ API কীটি পান

  1. google_maps_api.xml ফাইলের ডিবাগ সংস্করণটি খুলুন।

ফাইলটিতে একটি লম্বা URL সহ একটি মন্তব্য রয়েছে। URL এর প্যারামিটারগুলিতে আপনার অ্যাপ সম্পর্কে নির্দিষ্ট তথ্য অন্তর্ভুক্ত রয়েছে।

  1. URL টি কপি করে ব্রাউজারে পেস্ট করুন।
  2. গুগল এপিআই কনসোলে একটি প্রজেক্ট তৈরি করার জন্য প্রম্পটগুলি অনুসরণ করুন। প্রদত্ত ইউআরএলে থাকা প্যারামিটারগুলির কারণে, এপিআই কনসোল স্বয়ংক্রিয়ভাবে গুগল ম্যাপস অ্যান্ড্রয়েড এপিআই সক্ষম করতে জানে।
  3. একটি API কী তৈরি করুন এবং Android অ্যাপগুলিতে কী ব্যবহার সীমিত করতে Restrictive Key-এ ক্লিক করুন। তৈরি হওয়া API কীটি AIza দিয়ে শুরু হওয়া উচিত।
  4. google_maps_api.xml ফাইলে, কীটি google_maps_key স্ট্রিং-এ পেস্ট করুন যেখানে লেখা আছে YOUR_KEY_HERE
  5. তোমার অ্যাপটি চালাও। তোমার অ্যাক্টিভিটিতে একটি এমবেডেড ম্যাপ আছে, যার একটি মার্কার অস্ট্রেলিয়ার সিডনিতে সেট করা আছে। (সিডনি মার্কারটি টেমপ্লেটের অংশ, এবং তুমি পরে এটি পরিবর্তন করবে।)

৪. কাজ ২. মানচিত্রের ধরণ এবং মার্কার যোগ করুন

গুগল ম্যাপে বিভিন্ন ধরণের মানচিত্র অন্তর্ভুক্ত থাকে: সাধারণ, হাইব্রিড, স্যাটেলাইট, ভূখণ্ড এবং "কিছুই নয়"। এই কাজে আপনি একটি অ্যাপ বার যুক্ত করেন যার সাথে একটি বিকল্প মেনু থাকে যা ব্যবহারকারীকে মানচিত্রের ধরণ পরিবর্তন করতে দেয়। আপনি মানচিত্রের শুরুর অবস্থানটি আপনার নিজের বাড়ির অবস্থানে স্থানান্তর করেন। তারপরে আপনি চিহ্নিতকারীদের জন্য সমর্থন যোগ করেন, যা একটি মানচিত্রে একক অবস্থান নির্দেশ করে এবং একটি লেবেল অন্তর্ভুক্ত করতে পারে।

২.১ মানচিত্রের ধরণ যোগ করুন

আপনার ব্যবহারকারী কী ধরণের মানচিত্র চান তা নির্ভর করে তাদের প্রয়োজনীয় তথ্যের উপর। আপনার গাড়িতে নেভিগেশনের জন্য মানচিত্র ব্যবহার করার সময়, রাস্তার নামগুলি স্পষ্টভাবে দেখা সহায়ক। আপনি যখন হাইকিং করেন, তখন সম্ভবত আপনি পাহাড়ের চূড়ায় পৌঁছানোর জন্য আপনাকে কতটা উপরে উঠতে হবে তা নিয়ে বেশি চিন্তিত থাকেন। এই ধাপে, আপনি একটি অ্যাপ বার যুক্ত করবেন যার সাথে একটি বিকল্প মেনু থাকবে যা ব্যবহারকারীকে মানচিত্রের ধরণ পরিবর্তন করতে দেবে।

  1. একটি নতুন মেনু XML ফাইল তৈরি করতে, আপনার res ডিরেক্টরিতে ডান-ক্লিক করুন এবং New > Android Resource File নির্বাচন করুন।
  2. ডায়ালগে, map_options ফাইলটির নাম দিন। রিসোর্সের ধরণের জন্য মেনু নির্বাচন করুন। ঠিক আছে ক্লিক করুন।
  3. নতুন ফাইলের কোডটি নিম্নলিখিত কোড দিয়ে প্রতিস্থাপন করে মানচিত্রের বিকল্পগুলি তৈরি করুন। "none" মানচিত্রের ধরণটি বাদ দেওয়া হয়েছে, কারণ "none" এর ফলে কোনও মানচিত্রই থাকে না।
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:app="http://schemas.android.com/apk/res-auto">
   <item android:id="@+id/normal_map"
       android:title="@string/normal_map"
       app:showAsAction="never"/>
   <item android:id="@+id/hybrid_map"
       android:title="@string/hybrid_map"
       app:showAsAction="never"/>
   <item android:id="@+id/satellite_map"
       android:title="@string/satellite_map"
       app:showAsAction="never"/>
   <item android:id="@+id/terrain_map"
       android:title="@string/terrain_map"
       app:showAsAction="never"/>
</menu>
  1. title বৈশিষ্ট্যের জন্য স্ট্রিং রিসোর্স তৈরি করুন।
  2. MapsActivity ফাইলে, FragmentActivity ক্লাসটি প্রসারিত করার পরিবর্তে AppCompatActivity ক্লাসটি প্রসারিত করুন। AppCompatActivity ব্যবহার করলে অ্যাপ বারটি দেখাবে, এবং তাই এটি মেনুটি দেখাবে।
  3. MapsActivity তে, onCreateOptionsMenu() পদ্ধতিটি ওভাররাইড করুন এবং map_options ফাইলটি ফুলিয়ে দিন:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
   MenuInflater inflater = getMenuInflater();
   inflater.inflate(R.menu.map_options, menu);
   return true;
}
  1. মানচিত্রের ধরণ পরিবর্তন করতে, GoogleMap অবজেক্টে setMapType () পদ্ধতিটি ব্যবহার করুন, মানচিত্র-ধরণের ধ্রুবকগুলির একটিতে প্রবেশ করুন।

onOptionsItemSelected() পদ্ধতিটি ওভাররাইড করুন। ব্যবহারকারী যখন মেনু বিকল্পগুলির মধ্যে একটি নির্বাচন করেন তখন মানচিত্রের ধরণ পরিবর্তন করতে নিম্নলিখিত কোডটি পেস্ট করুন:

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
       // Change the map type based on the user's selection.
       switch (item.getItemId()) {
           case R.id.normal_map:
               mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
               return true;
           case R.id.hybrid_map:
               mMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
               return true;
           case R.id.satellite_map:
               mMap.setMapType(GoogleMap.MAP_TYPE_SATELLITE);
               return true;
           case R.id.terrain_map:
               mMap.setMapType(GoogleMap.MAP_TYPE_TERRAIN);
               return true;
           default:
               return super.onOptionsItemSelected(item);
       }
    }
  1. অ্যাপটি চালান। মানচিত্রের ধরণ পরিবর্তন করতে অ্যাপ বারের মেনু ব্যবহার করুন। লক্ষ্য করুন মানচিত্রের চেহারা কীভাবে পরিবর্তিত হয়।

২.২ ডিফল্ট মানচিত্রের অবস্থান সরান

ডিফল্টরূপে, onMapReady() কলব্যাকে এমন কোড থাকে যা অস্ট্রেলিয়ার সিডনিতে একটি মার্কার স্থাপন করে, যেখানে গুগল ম্যাপ তৈরি করা হয়েছিল। ডিফল্ট কলব্যাকটি সিডনিতে প্যান করার জন্য মানচিত্রটিকে অ্যানিমেট করে। এই ধাপে, আপনি কোনও মার্কার না রেখেই মানচিত্রটিকে আপনার বাড়ির অবস্থানে প্যান করতে পারেন, তারপর আপনার নির্দিষ্ট স্তরে জুম করতে পারেন।

  1. onMapReady() পদ্ধতিতে, সিডনিতে মার্কার স্থাপনকারী এবং ক্যামেরাটি সরানো কোডটি সরিয়ে ফেলুন।
  2. আপনার ব্রাউজারে www.google.com/maps এ যান এবং আপনার বাড়িটি খুঁজুন।
  3. লোকেশনের উপর ডান-ক্লিক করুন এবং What's here? নির্বাচন করুন।

স্ক্রিনের নীচের দিকে, একটি ছোট উইন্ডো পপ আপ হয় যেখানে অক্ষাংশ এবং দ্রাঘিমাংশ সহ অবস্থানের তথ্য থাকে।

  1. home নামে একটি নতুন LatLng অবজেক্ট তৈরি করুন। LatLng অবজেক্টে, ব্রাউজারে Google Maps থেকে পাওয়া স্থানাঙ্কগুলি ব্যবহার করুন।
  2. zoom নামে একটি float ভেরিয়েবল তৈরি করুন এবং ভেরিয়েবলটিকে আপনার পছন্দসই প্রাথমিক জুম লেভেলে সেট করুন। নিচের তালিকাটি আপনাকে প্রতিটি লেভেলের জুম কোন স্তরের বিশদ প্রদর্শন করে তার একটি ধারণা দেবে:
  • 1 : বিশ্ব
  • 5 : স্থলভাগ/মহাদেশ
  • 10 : শহর
  • 15 : রাস্তাঘাট
  • 20 : ভবন
  1. CameraUpdateFactory.newLatLngZoom() ব্যবহার করে একটি CameraUpdate অবজেক্ট তৈরি করুন, আপনার LatLng অবজেক্ট এবং zoom ভেরিয়েবলটি প্রবেশ করান। GoogleMap অবজেক্টে moveCamera() কল করে ক্যামেরাটি প্যান এবং জুম করুন, নতুন CameraUpdate অবজেক্টটি প্রবেশ করান:
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(home, zoom));
  1. অ্যাপটি চালান। মানচিত্রটি আপনার বাড়ির দিকে প্যান করে পছন্দসই স্তরে জুম করা উচিত।

২.৩ মানচিত্র চিহ্নিতকারী যোগ করুন

গুগল ম্যাপস একটি মার্কার ব্যবহার করে একটি অবস্থান চিহ্নিত করতে পারে, যা আপনি Marker ক্লাস ব্যবহার করে তৈরি করেন। ডিফল্ট মার্কারটি স্ট্যান্ডার্ড গুগল ম্যাপস আইকন ব্যবহার করে: গুগল ম্যাপস মার্কার

তথ্য উইন্ডোতে প্রাসঙ্গিক তথ্য দেখানোর জন্য আপনি মার্কারগুলি প্রসারিত করতে পারেন।

এই ধাপে, ব্যবহারকারী যখন মানচিত্রে কোনও অবস্থান স্পর্শ করে ধরে রাখে তখন আপনি একটি মার্কার যোগ করেন। তারপরে আপনি একটি InfoWindow যোগ করেন যা মার্কারটি ট্যাপ করার সময় মার্কারটির স্থানাঙ্ক প্রদর্শন করে।

একটি বাদ পড়া পিনের জন্য একটি তথ্য উইন্ডো

  1. MapsActivity তে setMapLongClick() নামক একটি মেথড স্টাব তৈরি করুন যা একটি final GoogleMap আর্গুমেন্ট হিসেবে গ্রহণ করে এবং void প্রদান করে:
private void setMapLongClick(final GoogleMap map) {}
  1. GoogleMap অবজেক্টের setOnMapLongClickListener() পদ্ধতি ব্যবহার করে এমন একটি মার্কার স্থাপন করুন যেখানে ব্যবহারকারী স্পর্শ করে ধরে রাখে। OnMapLongClickListener এর একটি নতুন উদাহরণ প্রবেশ করান যা onMapLongClick() পদ্ধতিকে ওভাররাইড করে। আগত আর্গুমেন্টটি হল একটি LatLng অবজেক্ট যাতে ব্যবহারকারী যে অবস্থানটি চাপিয়েছেন তার স্থানাঙ্ক থাকে:
private void setMapLongClick(final GoogleMap map) {
   map.setOnMapLongClickListener(new GoogleMap.OnMapLongClickListener() {
       @Override
       public void onMapLongClick(LatLng latLng) {
       }
   });
}
  1. onMapLongClick() এর ভেতরে, addMarker() পদ্ধতিটি কল করুন। পাস-ইন LatLng এ সেট করা অবস্থান সহ একটি নতুন MarkerOptions অবজেক্ট পাস করুন:
map.addMarker(new MarkerOptions().position(latLng));
  1. onMapReady() পদ্ধতির শেষে setMapLongClick() কল করুন। mMap এ পাস করুন।
  2. অ্যাপটি চালান। কোনও স্থানে মার্কার স্থাপন করতে মানচিত্রে স্পর্শ করে ধরে থাকুন।
  3. স্ক্রিনের কেন্দ্রে থাকা মার্কারটিতে ট্যাপ করুন।

স্ক্রিনের নীচে-বাম দিকে নেভিগেশন বোতামগুলি উপস্থিত হয়, যা ব্যবহারকারীকে চিহ্নিত অবস্থানে নেভিগেট করার জন্য গুগল ম্যাপস অ্যাপ ব্যবহার করতে দেয়।

মার্কারের জন্য একটি তথ্য উইন্ডো যোগ করতে:

  1. MarkerOptions অবজেক্টে, title ক্ষেত্র এবং snippet ক্ষেত্র সেট করুন।
  2. onMapLongClick() এ, title ফিল্ডটি "Dropped Pin" এ সেট করুন। addMarker() মেথডের ভিতরে অবস্থান স্থানাঙ্কে snippet ফিল্ডটি সেট করুন।
map.setOnMapLongClickListener(new GoogleMap.OnMapLongClickListener() {
   @Override
   public void onMapLongClick(LatLng latLng) {
       String snippet = String.format(Locale.getDefault(),
               "Lat: %1$.5f, Long: %2$.5f",
               latLng.latitude,
               latLng.longitude);

       map.addMarker(new MarkerOptions()
               .position(latLng)
               .title(getString(R.string.dropped_pin))
               .snippet(snippet));
   }
});
  1. অ্যাপটি চালান। লোকেশন মার্কার ড্রপ করতে ম্যাপে টাচ করে ধরে রাখুন। তথ্য উইন্ডোটি দেখানোর জন্য মার্কারটি ট্যাপ করুন।

২.৪ POI শ্রোতা যোগ করুন

ডিফল্টরূপে, আকর্ষণীয় স্থান (POI) মানচিত্রে তাদের সংশ্লিষ্ট আইকন সহ প্রদর্শিত হয়। POI-তে পার্ক, স্কুল, সরকারি ভবন এবং আরও অনেক কিছু অন্তর্ভুক্ত থাকে। যখন মানচিত্রের ধরণটি normal হিসাবে সেট করা হয়, তখন ব্যবসায়িক POI-গুলিও মানচিত্রে প্রদর্শিত হয়। ব্যবসায়িক POI দোকান, রেস্তোরাঁ এবং হোটেলের মতো ব্যবসাগুলিকে প্রতিনিধিত্ব করে।

এই ধাপে, আপনি মানচিত্রে একটি GoogleMap.OnPoiClickListener যোগ করবেন। এই ক্লিক-লিসনার স্পর্শ করে ধরে রাখার জন্য অপেক্ষা করার পরিবর্তে তাৎক্ষণিকভাবে মানচিত্রে একটি মার্কার স্থাপন করবে। ক্লিক-লিসনারটি POI নাম ধারণকারী তথ্য উইন্ডোটিও প্রদর্শন করবে।

আগ্রহের স্থান চিহ্নিতকারী

  1. MapsActivity তে setPoiClick() নামক একটি মেথড স্টাব তৈরি করুন যা একটি final GoogleMap আর্গুমেন্ট হিসেবে গ্রহণ করে এবং void প্রদান করে:
private void setPoiClick(final GoogleMap map) {}
  1. setPoiClick() পদ্ধতিতে, পাস-ইন করা GoogleMap এ একটি OnPoiClickListener সেট করুন:
map.setOnPoiClickListener(new GoogleMap.OnPoiClickListener() {
   @Override
   public void onPoiClick(PointOfInterest poi) {
   }
});
  1. onPoiClick() পদ্ধতিতে, POI অবস্থানে একটি মার্কার রাখুন। POI এর নাম অনুসারে শিরোনাম সেট করুন। ফলাফলটি poiMarker নামক একটি ভেরিয়েবলে সংরক্ষণ করুন।
public void onPoiClick(PointOfInterest poi) {
   Marker poiMarker = mMap.addMarker(new MarkerOptions()
       .position(poi.latLng)
       .title(poi.name);
}
  1. তথ্য উইন্ডোটি তাৎক্ষণিকভাবে দেখানোর জন্য poiMarkershowInfoWindow() কল করুন।
poiMarker.showInfoWindow();
  1. onMapReady() এর শেষে setPoiClick() কল করুন। mMap এ পাস করুন।
  2. আপনার অ্যাপটি চালান এবং একটি পার্কের মতো POI খুঁজুন। POI-তে ট্যাপ করে একটি মার্কার রাখুন এবং একটি তথ্য উইন্ডোতে POI-এর নাম প্রদর্শন করুন।

৫. কাজ ৩. আপনার মানচিত্রের স্টাইল তৈরি করুন

আপনি বিভিন্ন উপায়ে Google Maps কাস্টমাইজ করতে পারেন, যা আপনার মানচিত্রকে একটি অনন্য চেহারা এবং অনুভূতি দেবে।

আপনি উপলব্ধ XML বৈশিষ্ট্য ব্যবহার করে একটি MapFragment অবজেক্ট কাস্টমাইজ করতে পারেন, যেমন আপনি অন্য যেকোনো ফ্র্যাগমেন্ট কাস্টমাইজ করেন। তবে, এই ধাপে আপনি GoogleMap অবজেক্টের পদ্ধতি ব্যবহার করে MapFragment এর কন্টেন্টের চেহারা এবং অনুভূতি কাস্টমাইজ করতে পারেন। আপনি অনলাইন স্টাইলিং উইজার্ড ব্যবহার করে আপনার মানচিত্রে একটি স্টাইল যোগ করতে পারেন এবং আপনার মার্কারগুলি কাস্টমাইজ করতে পারেন। আপনি আপনার বাড়ির অবস্থানে একটি GroundOverlay ও যোগ করতে পারেন যা মানচিত্রের সাথে স্কেল এবং ঘূর্ণন করে।

৩.১ আপনার মানচিত্রে একটি স্টাইল যোগ করুন

আপনার মানচিত্রের জন্য একটি কাস্টমাইজড স্টাইল তৈরি করতে, আপনি একটি JSON ফাইল তৈরি করেন যা মানচিত্রের বৈশিষ্ট্যগুলি কীভাবে প্রদর্শিত হবে তা নির্দিষ্ট করে। আপনাকে এই JSON ফাইলটি ম্যানুয়ালি তৈরি করতে হবে না: Google স্টাইলিং উইজার্ড সরবরাহ করে, যা আপনার মানচিত্রটি দৃশ্যত স্টাইল করার পরে আপনার জন্য JSON তৈরি করে। এই ব্যবহারিক পদ্ধতিতে, আপনি "নাইট মোড" এর জন্য মানচিত্রটি স্টাইল করেন, যার অর্থ হল মানচিত্রটি রাতে ব্যবহারের জন্য আবছা রঙ এবং কম বৈসাদৃশ্য ব্যবহার করে।

  1. আপনার ব্রাউজারে https://mapstyle.withgoogle.com/ এ যান।
  2. একটি স্টাইল তৈরি করুন নির্বাচন করুন।
  3. রাতের থিম নির্বাচন করুন।
  4. মেনুর নীচে আরও বিকল্পগুলিতে ক্লিক করুন।
  5. Feature type তালিকার নীচে, Water > Fill নির্বাচন করুন। জলের রঙ গাঢ় নীল রঙে পরিবর্তন করুন (উদাহরণস্বরূপ, #160064)।
  6. Finish এ ক্লিক করুন। ফলে পপ-আপ উইন্ডো থেকে JSON কোডটি কপি করুন।
  7. অ্যান্ড্রয়েড স্টুডিওতে, res ডিরেক্টরিতে raw নামে একটি রিসোর্স ডিরেক্টরি তৈরি করুন। res/raw তে map_style.json নামে একটি ফাইল তৈরি করুন।
  8. নতুন রিসোর্স ফাইলে JSON কোডটি পেস্ট করুন।
  9. ম্যাপে JSON স্টাইল সেট করতে, GoogleMap অবজেক্টে setMapStyle() কল করুন। একটি MapStyleOptions অবজেক্ট পাস করুন, যা JSON ফাইল লোড করে। setMapStyle() পদ্ধতিটি স্টাইলিংয়ের সাফল্য নির্দেশ করে একটি বুলিয়ান ফেরত দেয়। যদি ফাইলটি লোড করা না যায়, তাহলে পদ্ধতিটি একটি Resources.NotFoundException ছুঁড়ে দেয়।

ম্যাপ স্টাইল করার জন্য নিচের কোডটি onMapReady() পদ্ধতিতে কপি করুন। আপনার লগ স্টেটমেন্টের জন্য একটি TAG স্ট্রিং তৈরি করতে হতে পারে:

     try {
        // Customize the styling of the base map using a JSON object defined
        // in a raw resource file.
        boolean success = googleMap.setMapStyle(
           MapStyleOptions.loadRawResourceStyle(
                   this, R.raw.map_style));

        if (!success) {
            Log.e(TAG, "Style parsing failed.");
        }
     } catch (Resources.NotFoundException e) {
        Log.e(TAG, "Can't find style. Error: ", e);
     }
  1. আপনার অ্যাপটি চালান। মানচিত্রটি normal মোডে থাকাকালীন নতুন স্টাইলিংটি দৃশ্যমান হওয়া উচিত।

নাইট মোড স্টাইলে গুগল ম্যাপ

৩.২ আপনার মার্কার স্টাইল করুন

আপনি মানচিত্র চিহ্নিতকারীগুলিকে স্টাইল করে আপনার মানচিত্রকে আরও ব্যক্তিগতকৃত করতে পারেন। এই ধাপে, আপনি রাতের মোডের রঙের স্কিমের সাথে মেলে ডিফল্ট লাল চিহ্নিতকারীগুলি পরিবর্তন করতে পারেন।

  1. onMapLongClick() পদ্ধতিতে, ডিফল্ট মার্কার ব্যবহার করতে MarkerOptions() কনস্ট্রাক্টরে কোডের নিম্নলিখিত লাইনটি যোগ করুন কিন্তু রঙটি নীল করুন:
.icon(BitmapDescriptorFactory.defaultMarker
       (BitmapDescriptorFactory.HUE_BLUE))
  1. অ্যাপটি চালান। আপনার লাগানো মার্কারগুলি এখন নীল রঙের, যা অ্যাপটির নাইট-মোড থিমের সাথে আরও সামঞ্জস্যপূর্ণ।

মনে রাখবেন যে POI মার্কারগুলি এখনও লাল, কারণ আপনি onPoiClick() পদ্ধতিতে স্টাইলিং যোগ করেননি।

৩.৩ একটি ওভারলে যোগ করুন

গুগল ম্যাপ কাস্টমাইজ করার একটি উপায় হল এর উপরে ছবি আঁকা। এই কৌশলটি কার্যকর যদি আপনি কোনও নির্দিষ্ট ধরণের অবস্থান, যেমন জনপ্রিয় মাছ ধরার জায়গা, হাইলাইট করতে চান। তিন ধরণের ওভারলে সমর্থিত:

  • আকার: আপনি মানচিত্রে পলিলাইন , বহুভুজ এবং বৃত্ত যোগ করতে পারেন।
  • TileOverlay অবজেক্ট: একটি টাইল ওভারলে এমন কিছু ছবির সেটকে সংজ্ঞায়িত করে যা বেস ম্যাপ টাইলসের উপরে যোগ করা হয়। যখন আপনি মানচিত্রে বিস্তৃত চিত্র যোগ করতে চান তখন টাইল ওভারলেগুলি কার্যকর। একটি সাধারণ টাইল ওভারলে একটি বৃহৎ ভৌগোলিক এলাকা জুড়ে থাকে।
  • GroundOverlay অবজেক্ট: গ্রাউন্ড ওভারলে হল এমন একটি ছবি যা একটি মানচিত্রে স্থির করা হয়। মার্কারের বিপরীতে, গ্রাউন্ড ওভারলেগুলি স্ক্রিনের পরিবর্তে পৃথিবীর পৃষ্ঠের দিকে কেন্দ্রীভূত হয়। মানচিত্রটি ঘোরানো, কাত করা বা জুম করা ছবির ওরিয়েন্টেশন পরিবর্তন করে। যখন আপনি মানচিত্রের একটি অংশে একটি একক ছবি ঠিক করতে চান তখন গ্রাউন্ড ওভারলেগুলি কার্যকর।

এই ধাপে, আপনি আপনার বাড়ির অবস্থানে একটি অ্যান্ড্রয়েডের আকারে একটি গ্রাউন্ড ওভারলে যুক্ত করবেন।

  1. এই অ্যান্ড্রয়েড ছবিটি ডাউনলোড করুন এবং আপনার res/drawable ফোল্ডারে সংরক্ষণ করুন।
  2. onMapReady() তে, ক্যামেরাটিকে হোম পজিশনে সরানোর জন্য কল করার পরে, একটি GroundOverlayOptions অবজেক্ট তৈরি করুন। অবজেক্টটিকে homeOverlay নামক একটি ভেরিয়েবলে অ্যাসাইন করুন:
GroundOverlayOptions homeOverlay = new GroundOverlayOptions();
  1. উপরের ছবিটি থেকে একটি BitmapDescriptor অবজেক্ট তৈরি করতে BitmapDescriptorFactory.fromResource() পদ্ধতি ব্যবহার করুন। GroundOverlayOptions অবজেক্টের image() পদ্ধতিতে অবজেক্টটি পাস করুন:
GroundOverlayOptions homeOverlay = new GroundOverlayOptions()
    .image(BitmapDescriptorFactory.fromResource(R.drawable.android));
  1. GroundOverlayOptions অবজেক্টের জন্য position() মেথডটি কল করে position প্রোপার্টি সেট করুন। home LatLng অবজেক্টে পাস করুন এবং কাঙ্ক্ষিত ওভারলেটির প্রস্থের জন্য মিটারে একটি float । এই উদাহরণের জন্য, 100 মিটার প্রস্থ ভালো কাজ করে:
GroundOverlayOptions homeOverlay = new GroundOverlayOptions()
     .image(BitmapDescriptorFactory.fromResource(R.drawable.android))
       .position(home, 100);
  1. GoogleMap অবজেক্টে addGroundOverlay() কল করুন। আপনার GroundOverlayOptions অবজেক্টটি পাস করুন:
mMap.addGroundOverlay(homeOverlay);
  1. অ্যাপটি চালান। আপনার বাড়ির অবস্থান জুম করুন, এবং আপনি অ্যান্ড্রয়েড ছবিটি একটি ওভারলে হিসাবে দেখতে পাবেন।

৬. কাজ ৪. লোকেশন ট্র্যাকিং এবং রাস্তার দৃশ্য সক্ষম করুন

ব্যবহারকারীরা প্রায়শই তাদের বর্তমান অবস্থান দেখতে Google Maps ব্যবহার করেন এবং আপনি Location Services API ব্যবহার করে ডিভাইসের অবস্থান পেতে পারেন। Location ডেটার আর ব্যবহার না করে আপনার মানচিত্রে ডিভাইসের অবস্থান প্রদর্শন করতে, আপনি location-data স্তর ব্যবহার করতে পারেন।

লোকেশন-ডেটা স্তরটি মানচিত্রের উপরের ডানদিকে একটি আমার অবস্থান বোতাম যুক্ত করে। ব্যবহারকারী যখন বোতামটি ট্যাপ করেন, তখন মানচিত্রটি ডিভাইসের অবস্থানের উপর কেন্দ্রীভূত হয়। ডিভাইসটি স্থির থাকলে অবস্থানটি নীল বিন্দু হিসাবে দেখানো হয় এবং ডিভাইসটি চলমান থাকলে নীল শেভ্রন হিসাবে দেখানো হয়।

অবস্থান ট্র্যাকিং সহ একটি স্টাইলযুক্ত গুগল ম্যাপ

আপনি গুগল স্ট্রিট ভিউ ব্যবহার করে কোনও অবস্থান সম্পর্কে অতিরিক্ত তথ্য প্রদান করতে পারেন, যা একটি নির্দিষ্ট অবস্থানের নেভিগেটযোগ্য প্যানোরামা ছবি।

এই কাজে, আপনি অবস্থান-ডেটা স্তর এবং রাস্তার দৃশ্য সক্ষম করবেন যাতে ব্যবহারকারী যখন POI মার্কারের জন্য তথ্য উইন্ডোতে ট্যাপ করেন, তখন মানচিত্রটি রাস্তার দৃশ্য মোডে চলে যায়।

৪.১ অবস্থান ট্র্যাকিং সক্ষম করুন

গুগল ম্যাপে লোকেশন ট্র্যাকিং সক্ষম করার জন্য একটি মাত্র লাইন কোড প্রয়োজন। তবে, আপনাকে অবশ্যই নিশ্চিত করতে হবে যে ব্যবহারকারী লোকেশন অনুমতি দিয়েছেন (রানটাইম-পারমিশন মডেল ব্যবহার করে)।

এই ধাপে, আপনি অবস্থানের অনুমতির জন্য অনুরোধ করবেন এবং অবস্থান ট্র্যাকিং সক্ষম করবেন।

  1. AndroidManifest.xml ফাইলে, যাচাই করুন যে FINE_LOCATION অনুমতি ইতিমধ্যেই উপস্থিত আছে। আপনি যখন Google Maps টেমপ্লেট নির্বাচন করেছিলেন তখন Android Studio এই অনুমতিটি প্রবেশ করিয়েছিল।
  2. আপনার অ্যাপে লোকেশন ট্র্যাকিং সক্ষম করতে, MapsActivityenableMyLocation() নামক একটি পদ্ধতি তৈরি করুন যা কোনও আর্গুমেন্ট নেয় না এবং কোনও কিছু ফেরত দেয় না।
  3. enableMyLocation() পদ্ধতিটি সংজ্ঞায়িত করুন। ACCESS_FINE_LOCATION অনুমতি আছে কিনা তা পরীক্ষা করুন। যদি অনুমতি দেওয়া হয়, তাহলে অবস্থান স্তরটি সক্ষম করুন। অন্যথায়, অনুমতির জন্য অনুরোধ করুন:
private void enableMyLocation() {
   if (ContextCompat.checkSelfPermission(this,
           Manifest.permission.ACCESS_FINE_LOCATION)
           == PackageManager.PERMISSION_GRANTED) {
       mMap.setMyLocationEnabled(true);
   } else {
       ActivityCompat.requestPermissions(this, new String[]
                       {Manifest.permission.ACCESS_FINE_LOCATION},
               REQUEST_LOCATION_PERMISSION);
   }
}
  1. লোকেশন লেয়ারটি সক্রিয় করতে onMapReady() কলব্যাক থেকে enableMyLocation() কল করুন।
  2. onRequestPermissionsResult() পদ্ধতিটি ওভাররাইড করুন। যদি অনুমতি দেওয়া হয়, তাহলে enableMyLocation() কল করুন:
@Override
public void onRequestPermissionsResult(int requestCode,
       @NonNull String[] permissions,
       @NonNull int[] grantResults) {
   // Check if location permissions are granted and if so enable the
   // location data layer.
   switch (requestCode) {
       case REQUEST_LOCATION_PERMISSION:
           if (grantResults.length > 0
                   && grantResults[0]
                   == PackageManager.PERMISSION_GRANTED) {
               enableMyLocation();
               break;
           }
   }
}
  1. অ্যাপটি চালান। উপরের ডানদিকের কোণায় এখন আমার অবস্থান বোতামটি রয়েছে, যা ডিভাইসের বর্তমান অবস্থান প্রদর্শন করে।

৪.২ রাস্তার দৃশ্য সক্ষম করুন

গুগল ম্যাপস স্ট্রিট ভিউ প্রদান করে, যা একটি নির্দিষ্ট পথ ধরে নেভিগেট করার জন্য নিয়ন্ত্রণ সহ একটি অবস্থানের একটি প্যানোরামিক দৃশ্য। স্ট্রিট ভিউ বিশ্বব্যাপী কভারেজ পায় না

এই ধাপে, আপনি একটি স্ট্রিট ভিউ প্যানোরামা সক্ষম করবেন যা ব্যবহারকারী যখন POI এর তথ্য উইন্ডোতে ট্যাপ করেন তখন সক্রিয় হয়। আপনাকে দুটি জিনিস করতে হবে:

  1. POI মার্কারগুলিকে অন্যান্য মার্কার থেকে আলাদা করুন, কারণ আপনি চান আপনার অ্যাপের কার্যকারিতা শুধুমাত্র POI মার্কারগুলিতে কাজ করুক। এইভাবে, ব্যবহারকারী যখন POI তথ্য উইন্ডোতে ট্যাপ করেন তখন আপনি রাস্তার দৃশ্য শুরু করতে পারেন, কিন্তু ব্যবহারকারী যখন অন্য কোনও ধরণের মার্কারে ট্যাপ করেন তখন নয়।

Marker ক্লাসে একটি setTag() পদ্ধতি রয়েছে যা আপনাকে ডেটা সংযুক্ত করতে দেয়। (ডেটা Object থেকে প্রসারিত যেকোনো কিছু হতে পারে)। ব্যবহারকারীরা POI তে ক্লিক করলে তৈরি হওয়া মার্কারগুলিতে আপনি একটি ট্যাগ সেট করবেন।

  1. যখন ব্যবহারকারী OnInfoWindowClickListener এ ট্যাগ করা তথ্য উইন্ডোতে ট্যাপ করেন, তখন MapFragment এর পরিবর্তে StreetViewPanoramaFragment ব্যবহার করেন। (নীচের কোডটি API 12 এর নীচের Android সংস্করণগুলিকে সমর্থন করার জন্য SupportMapFragment এবং SupportStreetViewPanoramaFragment ব্যবহার করে।)

রানটাইমে যদি কোনও টুকরো পরিবর্তন হয়, তাহলে আপনাকে অবশ্যই সেগুলিকে কনটেইনিং Activity ক্লাসে যোগ করতে হবে, XML-এ স্ট্যাটিক্যালি নয়।

POI মার্কার ট্যাগ করুন

  1. onPoiClick() কলব্যাকে, poiMarkersetTag() কল করুন। যেকোনো ইচ্ছামত স্ট্রিং পাস করুন:
poiMarker.setTag("poi");

স্ট্যাটিক SupportMapFragment কে রানটাইম ইনস্ট্যান্স দিয়ে প্রতিস্থাপন করুন।

  1. activity_maps.xml খুলুন এবং এলিমেন্টটিকে একটি ফ্রেম লেআউটে পরিবর্তন করুন যা আপনার টুকরোগুলির জন্য কন্টেইনার হিসেবে কাজ করবে:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:id="@+id/fragment_container"
   android:layout_width="match_parent"
   android:layout_height="match_parent" />
  1. MapsActivity এর onCreate() তে, SupportMapFragment by ID খুঁজে পাওয়া কোডটি সরিয়ে ফেলুন, কারণ XML তে আর কোনও স্ট্যাটিক SupportMapFragment নেই। পরিবর্তে, SupportMapFragment.newInstance() কল করে SupportMapFragment এর একটি নতুন রানটাইম ইনস্ট্যান্স তৈরি করুন:
SupportMapFragment mapFragment = SupportMapFragment.newInstance();
  1. FragmentManager এর সাথে একটি ফ্র্যাগমেন্ট লেনদেন ব্যবহার করে FrameLayout এ ফ্র্যাগমেন্টটি যোগ করুন:
getSupportFragmentManager().beginTransaction()
       .add(R.id.fragment_container, mapFragment).commit();
  1. মানচিত্রের অ্যাসিঙ্ক্রোনাস লোডিং ট্রিগার করে এমন কোডের লাইনটি রাখুন:
mapFragment.getMapAsync(this);

একটি OnInfoWindowClickListener সেট করুন এবং মার্কার ট্যাগটি পরীক্ষা করুন

  1. MapsActivity তে setInfoWindowClickToPanorama() নামক একটি মেথড স্টাব তৈরি করুন যা একটি GoogleMap আর্গুমেন্ট হিসেবে গ্রহণ করে এবং void প্রদান করে:
private void setInfoWindowClickToPanorama(GoogleMap map) {}
  1. GoogleMap একটি OnInfoWindowClickListener সেট করুন:
map.setOnInfoWindowClickListener(
       new GoogleMap.OnInfoWindowClickListener() {
           @Override
           public void onInfoWindowClick(Marker marker) {
           }
       });
  1. onInfoWindowClick() পদ্ধতিতে, onPoiClick() পদ্ধতিতে সেট করা স্ট্রিং ট্যাগটি মার্কারে আছে কিনা তা পরীক্ষা করুন:
if (marker.getTag() == "poi") {}

SupportMapFragment-কে SupportStreetViewPanoramaFragment দিয়ে প্রতিস্থাপন করুন।

  1. যদি মার্কারে ট্যাগ থাকে, তাহলে StreetViewPanoramaOptions অবজেক্ট ব্যবহার করে স্ট্রিট ভিউ প্যানোরামার অবস্থান নির্দিষ্ট করুন। অবজেক্টের position বৈশিষ্ট্যটি পাস-ইন মার্কারের অবস্থানে সেট করুন:
StreetViewPanoramaOptions options =
       new StreetViewPanoramaOptions().position(
               marker.getPosition());
  1. আপনার তৈরি করা options অবজেক্টটি প্রবেশ করিয়ে SupportStreetViewPanoramaFragment এর একটি নতুন ইনস্ট্যান্স তৈরি করুন:
SupportStreetViewPanoramaFragment streetViewFragment
       = SupportStreetViewPanoramaFragment
       .newInstance(options);
  1. একটি ফ্র্যাগমেন্ট লেনদেন শুরু করুন। ফ্র্যাগমেন্ট কন্টেইনারের বিষয়বস্তু নতুন ফ্র্যাগমেন্ট, streetViewFragment দিয়ে প্রতিস্থাপন করুন। লেনদেনটি ব্যাক স্ট্যাকে যোগ করুন, যাতে ব্যাক টিপলে SupportMapFragment এ ফিরে যাবে এবং অ্যাপ থেকে বেরিয়ে আসবে না:
getSupportFragmentManager().beginTransaction()
       .replace(R.id.fragment_container,
               streetViewFragment)
       .addToBackStack(null).commit();
  1. setPoiClick() কল করার পর onMapReady() ) তে setInfoWindowClickToPanorama(mMap) কল করুন setPoiClick().
  2. অ্যাপটি চালান। মাউন্টেন ভিউ (গুগল সদর দপ্তরের হোম) এর মতো রাস্তার দৃশ্যের কভারেজ আছে এমন কোনও শহরে জুম ইন করুন এবং একটি POI খুঁজুন, যেমন একটি পার্ক। একটি মার্কার স্থাপন করতে POI তে আলতো চাপুন এবং তথ্য উইন্ডোটি দেখান। মার্কারের অবস্থানের জন্য রাস্তার দৃশ্য মোডে প্রবেশ করতে তথ্য উইন্ডোতে আলতো চাপুন। মানচিত্রের অংশে ফিরে যেতে পিছনের বোতামটি টিপুন।

একটি অ্যান্ড্রয়েড অ্যাপে গুগল স্ট্রিট ভিউ

৭. সমাধান কোড

Wander সলিউশন কোড।

৮. কোডিং চ্যালেঞ্জ

চ্যালেঞ্জ: যদি আপনি এমন কোনও স্থানে POI-এর তথ্য উইন্ডোতে ট্যাপ করেন যেখানে কোনও স্ট্রিট ভিউ কভারেজ নেই, তাহলে আপনি একটি কালো স্ক্রিন দেখতে পাবেন।

  • কোনও এলাকায় স্ট্রিট ভিউ উপলব্ধ কিনা তা পরীক্ষা করতে, StreetViewPanorama.OnStreetViewPanoramaChangeListener এর সাথে OnStreetViewPanomaraReady কলব্যাক প্রয়োগ করুন।
  • যদি কোনও নির্বাচিত এলাকায় রাস্তার দৃশ্য উপলব্ধ না হয়, তাহলে মানচিত্রের অংশে ফিরে যান এবং একটি ত্রুটি দেখান।

9. সারাংশ

  • ম্যাপস এপিআই ব্যবহার করার জন্য, আপনার গুগল এপিআই কনসোল থেকে একটি এপিআই কী প্রয়োজন।
  • অ্যান্ড্রয়েড স্টুডিওতে, গুগল ম্যাপস অ্যাক্টিভিটি টেমপ্লেট ব্যবহার করে অ্যাপের লেআউটে একটি একক SupportMapFragment সহ একটি Activity তৈরি করা হয়। টেমপ্লেটটি অ্যাপ ম্যানিফেস্টে ACCESS_FINE_PERMISSION যোগ করে, আপনার অ্যাক্টিভিটিতে OnMapReadyCallback প্রয়োগ করে এবং প্রয়োজনীয় onMapReady() পদ্ধতিকে ওভাররাইড করে।

রানটাইমে GoogleMap ম্যাপের ধরণ পরিবর্তন করতে, GoogleMap.setMapType() পদ্ধতিটি ব্যবহার করুন। গুগল ম্যাপ নিম্নলিখিত ধরণের ম্যাপের মধ্যে একটি হতে পারে:

  • সাধারণ : সাধারণ রাস্তার মানচিত্র। রাস্তা, মানুষের তৈরি কিছু বৈশিষ্ট্য এবং নদীর মতো গুরুত্বপূর্ণ প্রাকৃতিক বৈশিষ্ট্য দেখানো হয়েছে। রাস্তা এবং বৈশিষ্ট্যের লেবেলগুলিও দৃশ্যমান।
  • হাইব্রিড : রাস্তার মানচিত্র সহ স্যাটেলাইট ফটোগ্রাফ ডেটা যোগ করা হয়েছে। রাস্তা এবং বৈশিষ্ট্য লেবেলগুলিও দৃশ্যমান।
  • স্যাটেলাইট : ছবির তথ্য। রাস্তা এবং বৈশিষ্ট্য লেবেল দৃশ্যমান নয়।
  • ভূখণ্ড : ভূ-সংস্থান সংক্রান্ত তথ্য। মানচিত্রে রঙ, কনট্যুর লাইন এবং লেবেল এবং দৃষ্টিকোণ ছায়া অন্তর্ভুক্ত রয়েছে। কিছু রাস্তা এবং লেবেলও দৃশ্যমান।
  • **:** কোন মানচিত্র নেই।

গুগল ম্যাপ সম্পর্কে:

  • একটি চিহ্নিতকারী একটি নির্দিষ্ট ভৌগোলিক অবস্থানের জন্য একটি সূচক।
  • ট্যাপ করা হলে, মার্কারের ডিফল্ট আচরণ হল অবস্থান সম্পর্কে তথ্য সহ একটি তথ্য উইন্ডো প্রদর্শন করা।
  • ডিফল্টরূপে, আগ্রহের স্থান (POI) তাদের সংশ্লিষ্ট আইকন সহ বেস ম্যাপে প্রদর্শিত হয়। POI-এর মধ্যে পার্ক, স্কুল, সরকারি ভবন এবং আরও অনেক কিছু অন্তর্ভুক্ত থাকে।
  • এছাড়াও, মানচিত্রের ধরণ normal থাকলে ব্যবসায়িক POI (দোকান, রেস্তোরাঁ, হোটেল এবং আরও অনেক কিছু) ডিফল্টরূপে মানচিত্রে প্রদর্শিত হয়।
  • আপনি OnPoiClickListener ব্যবহার করে POI গুলিতে ক্লিক ক্যাপচার করতে পারেন।
  • আপনি স্টাইলিং উইজার্ড ব্যবহার করে গুগল ম্যাপের প্রায় সকল উপাদানের ভিজ্যুয়াল চেহারা পরিবর্তন করতে পারেন। স্টাইলিং উইজার্ড একটি JSON ফাইল তৈরি করে যা আপনি setMapStyle() পদ্ধতি ব্যবহার করে গুগল ম্যাপে পাস করেন।
  • আপনি ডিফল্ট রঙ পরিবর্তন করে অথবা ডিফল্ট মার্কার আইকনটি একটি কাস্টম চিত্র দিয়ে প্রতিস্থাপন করে আপনার মার্কারগুলি কাস্টমাইজ করতে পারেন।

অন্যান্য গুরুত্বপূর্ণ তথ্য:

  • একটি ভৌগোলিক অবস্থানের সাথে একটি ছবি ঠিক করতে একটি গ্রাউন্ড ওভারলে ব্যবহার করুন।
  • ছবি, মিটারে ছবির আকার এবং ছবির অবস্থান নির্দিষ্ট করার জন্য একটি GroundOverlayOptions অবজেক্ট ব্যবহার করুন। ম্যাপে ওভারলে সেট করার জন্য এই অবজেক্টটি GoogleMap.addGroundOverlay() পদ্ধতিতে পাস করুন।
  • যদি আপনার অ্যাপের ACCESS_FINE_LOCATION অনুমতি থাকে, তাহলে আপনি mMap.setMyLocationEnabled(true) পদ্ধতি ব্যবহার করে অবস্থান ট্র্যাকিং সক্ষম করতে পারেন।
  • গুগল স্ট্রিট ভিউ তার কভারেজ এলাকার নির্দিষ্ট রাস্তা থেকে ৩৬০ ডিগ্রি প্যানোরামিক ভিউ প্রদান করে।
  • একটি নতুন স্ট্রিট ভিউ ফ্র্যাগমেন্ট তৈরি করতে StreetViewPanoramaFragment.newInstance() পদ্ধতি ব্যবহার করুন।
  • ভিউয়ের জন্য বিকল্পগুলি নির্দিষ্ট করতে, একটি StreetViewPanoramaOptions অবজেক্ট ব্যবহার করুন। অবজেক্টটিকে newInstance() পদ্ধতিতে পাস করুন।

১০. আরও জানুন

সম্পর্কিত ধারণা ডকুমেন্টেশন 9.1 এ রয়েছে: গুগল ম্যাপস এপিআই

অ্যান্ড্রয়েড ডেভেলপার ডকুমেন্টেশন:

রেফারেন্স ডকুমেন্টেশন:

১১. হোমওয়ার্ক

এই বিভাগে সেইসব শিক্ষার্থীদের জন্য সম্ভাব্য হোমওয়ার্ক অ্যাসাইনমেন্ট তালিকাভুক্ত করা হয়েছে যারা একজন প্রশিক্ষকের নেতৃত্বে একটি কোর্সের অংশ হিসেবে এই কোডল্যাবের মাধ্যমে কাজ করছেন। নিম্নলিখিত কাজগুলি প্রশিক্ষকের উপর নির্ভর করে:

  • প্রয়োজনে হোমওয়ার্ক দিন।
  • শিক্ষার্থীদের হোমওয়ার্ক কীভাবে জমা দিতে হবে তা জানান।
  • হোমওয়ার্কের গ্রেড দিন।

প্রশিক্ষকরা এই পরামর্শগুলি যতটা ইচ্ছা কম বা বেশি ব্যবহার করতে পারেন, এবং তাদের উপযুক্ত মনে হলে অন্য যেকোনো হোমওয়ার্ক দিতে দ্বিধা করবেন না।

আপনি যদি এই কোডল্যাবটি নিজে নিজে পরীক্ষা করে থাকেন, তাহলে আপনার জ্ঞান পরীক্ষা করার জন্য এই হোমওয়ার্ক অ্যাসাইনমেন্টগুলি ব্যবহার করতে দ্বিধা করবেন না।

একটি অ্যাপ তৈরি করুন এবং চালান

  1. গুগল ম্যাপস অ্যাক্টিভিটি টেমপ্লেট ব্যবহার করে এমন একটি নতুন অ্যাপ তৈরি করুন, যা অ্যাপটি চালু হওয়ার সময় গুগল ম্যাপ লোড করে।
  2. গুগল ম্যাপ লোড হয়ে গেলে, ক্যামেরাটি আপনার স্কুলের অবস্থান, আপনার বাড়ির অবস্থান, অথবা আপনার জন্য অর্থপূর্ণ অন্য কোনও স্থানে নিয়ে যান।
  3. মানচিত্রে দুটি মার্কার যোগ করুন, একটি আপনার স্কুলের অবস্থানে এবং একটি আপনার বাড়িতে বা অন্য কোনও গুরুত্বপূর্ণ স্থানে।
  4. ডিফল্ট রঙ পরিবর্তন করে অথবা ডিফল্ট মার্কার আইকনটি একটি কাস্টম চিত্র দিয়ে প্রতিস্থাপন করে মার্কার আইকনগুলি কাস্টমাইজ করুন।

ইঙ্গিত: onMapReady (GoogleMap googleMap) ডকুমেন্টেশন দেখুন।

এই প্রশ্নের উত্তর দাও

প্রশ্ন ১

যখন মানচিত্রটি লোড হয়ে অ্যাপে ব্যবহারের জন্য প্রস্তুত হয় তখন কোন পদ্ধতিটি বলা হয়?

প্রশ্ন ২

আপনার অ্যাপে গুগল ম্যাপ অন্তর্ভুক্ত করার জন্য আপনি কোন অ্যান্ড্রয়েড উপাদান ব্যবহার করতে পারেন?

  • MapView এবং MapFragment
  • MapFragment এবং MapActivity
  • MapView এবং MapActivity
  • শুধুমাত্র MapFragment

প্রশ্ন ৩

গুগল ম্যাপস অ্যান্ড্রয়েড এপিআই কোন ধরণের মানচিত্র অফার করে?

  • সাধারণ, হাইব্রিড, ভূখণ্ড, উপগ্রহ এবং রোডম্যাপ
  • সাধারণ, হাইব্রিড, ভূখণ্ড, উপগ্রহ, এবং "কিছুই নয়"
  • হাইব্রিড, ভূখণ্ড, উপগ্রহ, রোডম্যাপ, এবং "কিছুই নয়"
  • সাধারণ, ভূখণ্ড, উপগ্রহ, চিত্রম্যাপ, এবং "কিছুই নয়"

প্রশ্ন ৪

আগ্রহের বিন্দুতে (POI) অন-ক্লিক কার্যকারিতা যোগ করার জন্য আপনি কোন ইন্টারফেসটি প্রয়োগ করেন?

  • GoogleMap.OnPoiListener
  • GoogleMap.OnPoiClickListener
  • GoogleMap.OnPoiClick
  • GoogleMap.OnPoiClicked

গ্রেডিংয়ের জন্য আপনার অ্যাপ জমা দিন

গ্রেডকারীদের জন্য নির্দেশিকা

অ্যাপটিতে নিম্নলিখিত বৈশিষ্ট্যগুলি আছে কিনা তা পরীক্ষা করুন:

  • অ্যাপটি চালু হলে, গুগল ম্যাপ সঠিকভাবে প্রদর্শিত হয়, যা নির্দেশ করে যে একটি API কী সঠিকভাবে তৈরি করা হয়েছে।
  • গুগল ম্যাপ লোড হওয়ার পর, ক্যামেরাটি শিক্ষার্থীর বাড়ি বা স্কুলের অবস্থানে চলে যায়। কোডে, এই ধাপটি onMapReady (GoogleMap googleMap) কলব্যাক পদ্ধতিতে হওয়া উচিত।
  • শিক্ষার্থীর স্কুলের অবস্থান এবং অন্য কোনও স্থানে, যেমন শিক্ষার্থীর বাড়িতে মার্কারগুলি প্রদর্শিত হয়।
  • দুটি মার্কার কাস্টমাইজ করা হয়েছে। উদাহরণস্বরূপ, মার্কারগুলি ডিফল্ট লাল রঙ ছাড়া অন্য কোনও রঙ ব্যবহার করে, অথবা তারা একটি কাস্টম আইকন ব্যবহার করে।

১২. পরবর্তী কোডল্যাব

অ্যাডভান্সড অ্যান্ড্রয়েড ডেভেলপমেন্ট প্রশিক্ষণ কোর্সের সমস্ত কোডল্যাব দেখতে, অ্যাডভান্সড অ্যান্ড্রয়েড ডেভেলপমেন্ট কোডল্যাব ল্যান্ডিং পৃষ্ঠাটি দেখুন।