ক্যামেরা এবং ভিউ

প্ল্যাটফর্ম নির্বাচন করুন: অ্যান্ড্রয়েড আইওএস জাভাস্ক্রিপ্ট

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

কোডের নমুনা

গিটহাবের ApiDemos রিপোজিটরিতে একটি নমুনা রয়েছে যা ক্যামেরার বৈশিষ্ট্যগুলো প্রদর্শন করে:

ভূমিকা

ওয়েবের গুগল ম্যাপসের মতোই, অ্যান্ড্রয়েডের জন্য ম্যাপস এসডিকে মারকেটর প্রজেকশন ব্যবহার করে আপনার ডিভাইসের স্ক্রিনে (একটি সমতল তল) পৃথিবীর পৃষ্ঠকে (একটি গোলক) উপস্থাপন করে। পূর্ব এবং পশ্চিম দিকে, মানচিত্রটি অসীমভাবে পুনরাবৃত্ত হয়, কারণ পৃথিবী নির্বিঘ্নে নিজের উপরই আবর্তিত হয়। উত্তর এবং দক্ষিণ দিকে মানচিত্রটি প্রায় ৮৫ ডিগ্রি উত্তর এবং ৮৫ ডিগ্রি দক্ষিণে সীমাবদ্ধ থাকে।

দ্রষ্টব্য: মারকেটর প্রজেকশনের অনুদৈর্ঘ্য বরাবর একটি সসীম প্রস্থ কিন্তু অক্ষাংশ বরাবর একটি অসীম উচ্চতা রয়েছে। আমরা মারকেটর প্রজেকশন ব্যবহার করে বেস ম্যাপের চিত্রাবলীকে প্রায় +/- ৮৫ ডিগ্রিতে "কেটে ফেলি" যাতে ফলস্বরূপ মানচিত্রের আকৃতি বর্গাকার হয়, যা টাইল নির্বাচনের জন্য সহজতর লজিক তৈরি করে।

অ্যান্ড্রয়েডের জন্য ম্যাপস এসডিকে আপনাকে ম্যাপের ক্যামেরা পরিবর্তন করার মাধ্যমে ম্যাপ দেখার দৃষ্টিকোণ পরিবর্তন করার সুযোগ দেয়।

ক্যামেরার পরিবর্তনে আপনার যোগ করা মার্কার, ওভারলে বা অন্যান্য গ্রাফিক্সের কোনো পরিবর্তন হবে না, যদিও নতুন দৃশ্যের সাথে আরও ভালোভাবে মানিয়ে নেওয়ার জন্য আপনি আপনার সংযোজনগুলো পরিবর্তন করতে চাইতে পারেন।

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

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

ক্যামেরার অবস্থান

মানচিত্রের দৃশ্যটিকে একটি ক্যামেরা হিসেবে মডেল করা হয়েছে যা একটি সমতল তলের উপর থেকে নিচের দিকে তাকায়। ক্যামেরার অবস্থান (এবং ফলস্বরূপ মানচিত্রের রেন্ডারিং) নিম্নলিখিত প্রোপার্টিগুলোর মাধ্যমে নির্দিষ্ট করা হয়: টার্গেট (অক্ষাংশ/দ্রাঘিমাংশ) , বেয়ারিং , টিল্ট এবং জুম

ক্যামেরার বৈশিষ্ট্য ডায়াগ্রাম

লক্ষ্য (অবস্থান)

ক্যামেরার লক্ষ্যবস্তু হলো মানচিত্রের কেন্দ্রের অবস্থান, যা অক্ষাংশ ও দ্রাঘিমাংশ স্থানাঙ্ক হিসেবে নির্দিষ্ট করা থাকে।

অক্ষাংশ -৮৫ থেকে ৮৫ ডিগ্রির মধ্যে হতে পারে। এই সীমার উপরে বা নীচের মানগুলিকে এই সীমার মধ্যে নিকটতম মানে স্থির করা হবে। উদাহরণস্বরূপ, ১০০ অক্ষাংশ নির্দিষ্ট করলে মানটি ৮৫-তে সেট করা হবে। দ্রাঘিমাংশ -১৮০ থেকে ১৮০ ডিগ্রির মধ্যে হতে পারে। এই সীমার উপরে বা নীচের মানগুলিকে এমনভাবে মোড়ানো হবে যাতে সেগুলি (-১৮০, ১৮০) সীমার মধ্যে পড়ে। উদাহরণস্বরূপ, ৪৮০, ৮৪০ এবং ১২০০ সবগুলিকেই ১২০ ডিগ্রিতে মোড়ানো হবে।

দিক (অভিমুখ)

ক্যামেরা বেয়ারিং মানচিত্রের উপরের প্রান্তের সাপেক্ষে প্রকৃত উত্তর থেকে ডিগ্রিতে পরিমাপ করা দিক নির্দেশ করে। যদি আপনি মানচিত্রের কেন্দ্র থেকে উপরের প্রান্ত পর্যন্ত একটি উল্লম্ব রেখা আঁকেন, তবে সেই বেয়ারিংটি প্রকৃত উত্তরের সাপেক্ষে ক্যামেরার হেডিং (ডিগ্রিতে পরিমাপ করা) নির্দেশ করে।

বেয়ারিং ০ হওয়ার অর্থ হলো মানচিত্রের উপরিভাগ প্রকৃত উত্তর দিকে নির্দেশ করে। বেয়ারিং ৯০ হওয়ার অর্থ হলো মানচিত্রের উপরিভাগ ঠিক পূর্ব দিকে (কম্পাসের ৯০ ডিগ্রি) নির্দেশ করে। বেয়ারিং ১৮০ হওয়ার অর্থ হলো মানচিত্রের উপরিভাগ ঠিক দক্ষিণ দিকে নির্দেশ করে।

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

নতি (দেখার কোণ)

টিল্ট বা কোণাকোণি অবস্থানটি মানচিত্রের কেন্দ্রবিন্দুর ঠিক উপরে একটি বৃত্তচাপ বরাবর ক্যামেরার অবস্থানকে নির্দেশ করে, যা নাদির (ক্যামেরার ঠিক নিচের দিক) থেকে ডিগ্রিতে পরিমাপ করা হয়। ০ মানটি নির্দেশ করে ক্যামেরাটি সোজা নিচের দিকে তাক করা আছে। ০-এর চেয়ে বড় মানগুলো নির্দেশ করে ক্যামেরাটি নির্দিষ্ট সংখ্যক ডিগ্রিতে দিগন্তের দিকে হেলানো আছে। যখন আপনি দেখার কোণ পরিবর্তন করেন, তখন মানচিত্রটি একটি পরিপ্রেক্ষিত বা পার্সপেক্টিভে প্রদর্শিত হয়, যেখানে দূরের বৈশিষ্ট্যগুলো ছোট এবং কাছের বৈশিষ্ট্যগুলো বড় দেখায়। নিচের চিত্রগুলোতে এটি দেখানো হয়েছে।

নিচের ছবিগুলোতে দেখার কোণ হলো ০ ডিগ্রি। প্রথম ছবিতে এর একটি নকশা দেখানো হয়েছে; অবস্থান হলো ক্যামেরার অবস্থান এবং অবস্থান হলো বর্তমান মানচিত্রের অবস্থান। এর ফলে প্রাপ্ত মানচিত্রটি এর নিচে দেখানো হয়েছে।

০ ডিগ্রি ভিউয়িং অ্যাঙ্গেলে এবং ১৮ জুম লেভেলে থাকা ক্যামেরার একটি মানচিত্রের স্ক্রিনশট।
মানচিত্রটি ক্যামেরার ডিফল্ট ভিউয়িং অ্যাঙ্গেলে প্রদর্শিত হয়েছে।
ডায়াগ্রামটি ক্যামেরার ডিফল্ট অবস্থান দেখাচ্ছে, যা ম্যাপের অবস্থানের ঠিক উপরে ০ ডিগ্রি কোণে অবস্থিত।
ক্যামেরার ডিফল্ট দেখার কোণ।

নিচের ছবিগুলোতে দেখার কোণ হলো ৪৫ ডিগ্রি। লক্ষ্য করুন যে, ক্যামেরাটি ঠিক মাথার ওপর (০ ডিগ্রি) এবং ভূমির (৯০ ডিগ্রি) মধ্যবর্তী একটি বৃত্তচাপের অর্ধেক পথ অতিক্রম করে ৩ নং অবস্থানে চলে আসে। ক্যামেরাটি তখনও মানচিত্রের কেন্দ্রবিন্দুর দিকেই তাক করা আছে, কিন্তু ৪ নং অবস্থানে রেখা দ্বারা নির্দেশিত এলাকাটি এখন দৃশ্যমান।

৪৫ ডিগ্রি ভিউয়িং অ্যাঙ্গেলে এবং ১৮ জুম লেভেলে থাকা ক্যামেরা দিয়ে তোলা একটি মানচিত্রের স্ক্রিনশট।
মানচিত্রটি ৪৫ ডিগ্রি দর্শন কোণে প্রদর্শিত হয়েছে।
ডায়াগ্রামটিতে দেখানো হয়েছে যে ক্যামেরার ভিউয়িং অ্যাঙ্গেল ৪৫ ডিগ্রিতে সেট করা আছে এবং জুম লেভেল ১৮-তেই স্থির রয়েছে।
ক্যামেরার ৪৫ ডিগ্রি দর্শন কোণ।

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

জুম

ক্যামেরার জুম লেভেল মানচিত্রের স্কেল নির্ধারণ করে। বেশি জুম লেভেলে স্ক্রিনে আরও বিস্তারিত দেখা যায়, অন্যদিকে কম জুম লেভেলে স্ক্রিনে পৃথিবীর আরও বেশি অংশ দেখা যায়। জুম লেভেল ০-তে, মানচিত্রের স্কেল এমন হয় যে পুরো পৃথিবীর প্রস্থ প্রায় ২৫৬ ডিপি ( ডেনসিটি-ইন্ডিপেন্ডেন্ট পিক্সেল ) হয়।

জুম লেভেল ১ বাড়ালে স্ক্রিনের জগতের প্রস্থ দ্বিগুণ হয়। সুতরাং, জুম লেভেল N-এ, জগতের প্রস্থ প্রায় 256 * 2 N dp হয়। উদাহরণস্বরূপ, জুম লেভেল ২-এ, পুরো জগৎটি প্রায় 1024 dp চওড়া হয়।

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

  • ১: বিশ্ব
  • ৫: ভূখণ্ড/মহাদেশ
  • ১০: শহর
  • ১৫: রাস্তা
  • ২০: ভবন
নিম্নলিখিত চিত্রগুলিতে বিভিন্ন জুম স্তরের দৃশ্যমান রূপ দেখানো হয়েছে:
৫ জুম লেভেলে তোলা একটি মানচিত্রের স্ক্রিনশট।
জুম লেভেল ৫-এর একটি মানচিত্র।
১৫ জুম লেভেলে তোলা একটি মানচিত্রের স্ক্রিনশট
১৫ জুম স্তরের একটি মানচিত্র।
জুম লেভেল ২০-এ একটি মানচিত্রের স্ক্রিনশট
জুম লেভেল ২০-এর একটি মানচিত্র।

ক্যামেরা সরানো

ম্যাপস এপিআই আপনাকে মানচিত্রে বিশ্বের কোন অংশ দৃশ্যমান থাকবে তা পরিবর্তন করার সুযোগ দেয়। মানচিত্র না সরিয়ে, ক্যামেরার অবস্থান পরিবর্তনের মাধ্যমে এটি করা হয়।

ক্যামেরা পরিবর্তন করার সময়, এর ফলে সৃষ্ট ক্যামেরা মুভমেন্টকে অ্যানিমেট করার বিকল্প থাকে। অ্যানিমেশনটি বর্তমান এবং নতুন ক্যামেরার বৈশিষ্ট্যগুলোর মধ্যে সমন্বয় সাধন করে। আপনি অ্যানিমেশনটির সময়কালও নিয়ন্ত্রণ করতে পারেন।

ক্যামেরার অবস্থান পরিবর্তন করতে, আপনাকে একটি CameraUpdate ব্যবহার করে নির্দিষ্ট করতে হবে যে আপনি ক্যামেরাটি কোথায় সরাতে চান। Maps API আপনাকে CameraUpdateFactory ব্যবহার করে বিভিন্ন ধরণের CameraUpdate তৈরি করার সুযোগ দেয়। নিম্নলিখিত বিকল্পগুলি উপলব্ধ রয়েছে:

জুমের স্তর পরিবর্তন করা এবং সর্বনিম্ন/সর্বোচ্চ জুম নির্ধারণ করা

CameraUpdateFactory.zoomIn() এবং CameraUpdateFactory.zoomOut() আপনাকে এমন একটি CameraUpdate দেয় যা জুম লেভেলকে ১.০ দ্বারা পরিবর্তন করে, কিন্তু অন্যান্য সমস্ত প্রোপার্টি অপরিবর্তিত রাখে।

CameraUpdateFactory.zoomTo(float) একটি CameraUpdate দেয় যা জুম লেভেলকে প্রদত্ত মানে পরিবর্তন করে, কিন্তু অন্যান্য সমস্ত প্রোপার্টি অপরিবর্তিত রাখে।

CameraUpdateFactory.zoomBy(float) এবং CameraUpdateFactory.zoomBy(float, Point) আপনাকে এমন একটি CameraUpdate দেয় যা প্রদত্ত মান অনুযায়ী জুম লেভেল বাড়ায় (অথবা মানটি ঋণাত্মক হলে কমায়)। পরেরটি স্ক্রিনে প্রদত্ত বিন্দুটিকে একই অবস্থানে (অক্ষাংশ/দ্রাঘিমাংশ) স্থির রাখে এবং এটি করার জন্য ক্যামেরার অবস্থান পরিবর্তন করতে পারে।

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

কোটলিন

private lateinit var map: GoogleMap

    map.setMinZoomPreference(6.0f)
    map.setMaxZoomPreference(14.0f)

      

জাভা

private GoogleMap map;
    map.setMinZoomPreference(6.0f);
    map.setMaxZoomPreference(14.0f);

      

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

ক্যামেরার অবস্থান পরিবর্তন করা

সাধারণ অবস্থান পরিবর্তনের জন্য দুটি সুবিধাজনক পদ্ধতি রয়েছে। CameraUpdateFactory.newLatLng(LatLng) আপনাকে এমন একটি CameraUpdate দেয় যা ক্যামেরার অক্ষাংশ এবং দ্রাঘিমাংশ পরিবর্তন করে, এবং অন্যান্য সমস্ত বৈশিষ্ট্য অপরিবর্তিত রাখে। CameraUpdateFactory.newLatLngZoom(LatLng, float) আপনাকে এমন একটি CameraUpdate দেয় যা ক্যামেরার অক্ষাংশ, দ্রাঘিমাংশ এবং জুম পরিবর্তন করে, এবং অন্যান্য সমস্ত বৈশিষ্ট্য অপরিবর্তিত রাখে।

ক্যামেরার অবস্থান পরিবর্তনে পূর্ণ নমনীয়তার জন্য CameraUpdateFactory.newCameraPosition(CameraPosition) ব্যবহার করুন, যা একটি CameraUpdate প্রদান করে এবং ক্যামেরাটিকে প্রদত্ত অবস্থানে নিয়ে যায়। একটি CameraPosition সরাসরি new CameraPosition() ব্যবহার করে অথবা new CameraPosition.Builder() ব্যবহার করে CameraPosition.Builder এর মাধ্যমে পাওয়া যেতে পারে।

প্যানিং (স্ক্রোলিং)

CameraUpdateFactory.scrollBy(float, float) আপনাকে এমন একটি CameraUpdate দেয় যা ক্যামেরার অক্ষাংশ এবং দ্রাঘিমাংশ পরিবর্তন করে, যার ফলে ম্যাপটি নির্দিষ্ট সংখ্যক পিক্সেল সরে যায়। একটি ধনাত্মক x মান ক্যামেরাটিকে ডানদিকে সরায়, ফলে ম্যাপটি বামদিকে সরে গেছে বলে মনে হয়। একটি ধনাত্মক y মান ক্যামেরাটিকে নিচের দিকে সরায়, ফলে ম্যাপটি উপরের দিকে সরে গেছে বলে মনে হয়। বিপরীতভাবে, ঋণাত্মক x মান ক্যামেরাটিকে বামদিকে সরায়, ফলে ম্যাপটি ডানদিকে সরে গেছে বলে মনে হয় এবং ঋণাত্মক y মান ক্যামেরাটিকে উপরের দিকে সরায়। এই স্ক্রলিং ক্যামেরার বর্তমান অভিমুখের সাপেক্ষে হয়। উদাহরণস্বরূপ, যদি ক্যামেরার বেয়ারিং ৯০ ডিগ্রি হয়, তবে পূর্ব দিক হলো "উপরের দিক"।

সীমানা নির্ধারণ করা

মানচিত্রের সীমানা নির্ধারণ করা

কখনও কখনও ক্যামেরা এমনভাবে সরানো দরকারি হয় যাতে আগ্রহের একটি সম্পূর্ণ এলাকা সর্বোচ্চ সম্ভাব্য জুম লেভেলে দেখা যায়। উদাহরণস্বরূপ, যদি আপনি ব্যবহারকারীর বর্তমান অবস্থান থেকে পাঁচ মাইলের মধ্যে থাকা সমস্ত গ্যাস স্টেশন প্রদর্শন করতে চান, তাহলে আপনি ক্যামেরাটি এমনভাবে সরাতে চাইতে পারেন যাতে সেগুলি সবই স্ক্রিনে দেখা যায়। এটি করার জন্য, প্রথমে সেই LatLngBounds গণনা করুন যা আপনি স্ক্রিনে দেখাতে চান। তারপর আপনি CameraUpdateFactory.newLatLngBounds(LatLngBounds bounds, int padding) ব্যবহার করে একটি CameraUpdate পেতে পারেন যা ক্যামেরার অবস্থান এমনভাবে পরিবর্তন করে যাতে প্রদত্ত LatLngBounds নির্দিষ্ট প্যাডিং (পিক্সেলে) বিবেচনা করে ম্যাপের মধ্যে সম্পূর্ণরূপে ফিট করে। ফেরত আসা CameraUpdate নিশ্চিত করে যে প্রদত্ত সীমানা এবং ম্যাপের প্রান্তের মধ্যে ফাঁক (পিক্সেলে) অন্তত নির্দিষ্ট প্যাডিংয়ের সমান হবে। মনে রাখবেন যে ম্যাপের টিল্ট এবং বিয়ারিং উভয়ই 0 হবে।

কোটলিন

val australiaBounds = LatLngBounds(
    LatLng((-44.0), 113.0),  // SW bounds
    LatLng((-10.0), 154.0) // NE bounds
)
map.moveCamera(CameraUpdateFactory.newLatLngBounds(australiaBounds, 0))

      

জাভা

LatLngBounds australiaBounds = new LatLngBounds(
    new LatLng(-44, 113), // SW bounds
    new LatLng(-10, 154)  // NE bounds
);
map.moveCamera(CameraUpdateFactory.newLatLngBounds(australiaBounds, 0));

      

একটি এলাকার মধ্যে মানচিত্রকে কেন্দ্র করা

কিছু ক্ষেত্রে, আপনি প্রান্তিক সীমানা অন্তর্ভুক্ত না করে একটি সীমানার মধ্যেই আপনার ক্যামেরাকে কেন্দ্র করতে চাইতে পারেন। উদাহরণস্বরূপ, একটি স্থির জুম বজায় রেখে কোনো দেশের উপর ক্যামেরাকে কেন্দ্র করার জন্য। এই ক্ষেত্রে, আপনি একটি LatLngBounds তৈরি করে এবং LatLngBounds getCenter() পদ্ধতির সাথে CameraUpdateFactory.newLatLngZoom(LatLng latLng, float zoom) ব্যবহার করে একটি অনুরূপ পদ্ধতি ব্যবহার করতে পারেন। getCenter() পদ্ধতিটি LatLngBounds এর ভৌগোলিক কেন্দ্রটি ফেরত দেবে।

কোটলিন

val australiaBounds = LatLngBounds(
    LatLng((-44.0), 113.0),  // SW bounds
    LatLng((-10.0), 154.0) // NE bounds
)
map.moveCamera(CameraUpdateFactory.newLatLngZoom(australiaBounds.center, 10f))

      

জাভা

LatLngBounds australiaBounds = new LatLngBounds(
    new LatLng(-44, 113), // SW bounds
    new LatLng(-10, 154)  // NE bounds
);
map.moveCamera(CameraUpdateFactory.newLatLngZoom(australiaBounds.getCenter(), 10));

      

` newLatLngBounds(boundary, width, height, padding) ` মেথডটির একটি ওভারলোড আপনাকে একটি আয়তক্ষেত্রের জন্য পিক্সেলে প্রস্থ এবং উচ্চতা নির্দিষ্ট করার সুযোগ দেয়, যার উদ্দেশ্য হলো এগুলো যেন ম্যাপের ডাইমেনশনের সাথে মিলে যায়। আয়তক্ষেত্রটিকে এমনভাবে স্থাপন করা হয় যাতে এর কেন্দ্র ম্যাপের ভিউ-এর কেন্দ্রের সাথে একই হয় (অর্থাৎ, যদি নির্দিষ্ট করা ডাইমেনশনগুলো ম্যাপের ভিউ-এর ডাইমেনশনের সমান হয়, তবে আয়তক্ষেত্রটি ম্যাপের ভিউ-এর সাথে মিলে যায়)। রিটার্ন করা CameraUpdate ফাংশনটি ক্যামেরাটিকে এমনভাবে সরিয়ে দেবে যাতে প্রয়োজনীয় প্যাডিং বিবেচনায় রেখে, সর্বোচ্চ সম্ভাব্য জুম লেভেলে নির্দিষ্ট LatLngBounds প্রদত্ত আয়তক্ষেত্রের মধ্যে স্ক্রিনের কেন্দ্রে থাকে।

দ্রষ্টব্য: যদি ম্যাপের লেআউট সম্পন্ন হওয়ার পর ক্যামেরা সরানোর জন্য CameraUpdate ব্যবহার করা হয়, তবেই কেবল newLatLngBounds(boundary, padding) এই সহজ পদ্ধতিটি ব্যবহার করুন। লেআউটের সময়, API ম্যাপের ডিসপ্লে বাউন্ডারি গণনা করে, যা বাউন্ডিং বক্সকে সঠিকভাবে প্রজেক্ট করার জন্য প্রয়োজন। এর বিপরীতে, আপনি newLatLngBounds(boundary, width, height, padding) এর মতো আরও জটিল পদ্ধতি থেকে প্রাপ্ত CameraUpdate যেকোনো সময় ব্যবহার করতে পারেন, এমনকি ম্যাপের লেআউট সম্পন্ন হওয়ার আগেও, কারণ API আপনার দেওয়া আর্গুমেন্টগুলো থেকেই ডিসপ্লে বাউন্ডারি গণনা করে।

ব্যবহারকারীর প্যানিং একটি নির্দিষ্ট এলাকায় সীমাবদ্ধ করা

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

কোটলিন

// Create a LatLngBounds that includes the city of Adelaide in Australia.
val adelaideBounds = LatLngBounds(
    LatLng(-35.0, 138.58),  // SW bounds
    LatLng(-34.9, 138.61) // NE bounds
)

// Constrain the camera target to the Adelaide bounds.
map.setLatLngBoundsForCameraTarget(adelaideBounds)

      

জাভা

// Create a LatLngBounds that includes the city of Adelaide in Australia.
LatLngBounds adelaideBounds = new LatLngBounds(
    new LatLng(-35.0, 138.58), // SW bounds
    new LatLng(-34.9, 138.61)  // NE bounds
);

// Constrain the camera target to the Adelaide bounds.
map.setLatLngBoundsForCameraTarget(adelaideBounds);

      

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

ডায়াগ্রামটিতে এমন একটি ক্যামেরা LatLngBounds দেখানো হয়েছে যা ভিউপোর্টের চেয়ে বড়।

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

ক্যামেরার LatLngBounds-এর নিচের ডান কোণায় অবস্থিত ক্যামেরা টার্গেট দেখানো ডায়াগ্রাম।

নিম্নলিখিত ডায়াগ্রামে, ক্যামেরা টার্গেটের সীমানা অত্যন্ত সীমাবদ্ধ, যা ব্যবহারকারীকে ম্যাপ স্ক্রল বা প্যান করার খুব কম সুযোগ দেয়। ক্রস চিহ্নটি ক্যামেরা টার্গেটকে নির্দেশ করে:

ডায়াগ্রামটিতে এমন একটি ক্যামেরা LatLngBounds দেখানো হয়েছে যা ভিউপোর্টের চেয়ে ছোট।

ক্যামেরা ভিউ আপডেট করা হচ্ছে

ম্যাপে CameraUpdate প্রয়োগ করতে, আপনি ক্যামেরাটি তাৎক্ষণিকভাবে সরাতে পারেন অথবা মসৃণভাবে অ্যানিমেট করতে পারেন। প্রদত্ত CameraUpdate সাথে ক্যামেরাটি তাৎক্ষণিকভাবে সরাতে, আপনি GoogleMap.moveCamera(CameraUpdate) কল করতে পারেন।

পরিবর্তনটিকে অ্যানিমেট করার মাধ্যমে আপনি ব্যবহারকারীর অভিজ্ঞতা আরও আনন্দদায়ক করে তুলতে পারেন, বিশেষ করে অল্প দূরত্বের স্থানান্তরের ক্ষেত্রে। এটি করার জন্য GoogleMap.moveCamera কল করার পরিবর্তে GoogleMap.animateCamera কল করুন। ম্যাপটি মসৃণভাবে নতুন অ্যাট্রিবিউটগুলিতে স্থানান্তরিত হবে। এই মেথডটির সবচেয়ে বিস্তারিত রূপ, GoogleMap.animateCamera(cameraUpdate, duration, callback) , তিনটি আর্গুমেন্ট গ্রহণ করে:

cameraUpdate
CameraUpdate বর্ণনা করে ক্যামেরাটি কোথায় সরাতে হবে।
callback
একটি অবজেক্ট যা GoogleMap.CancellableCallback ইমপ্লিমেন্ট করে। টাস্ক পরিচালনার জন্য এই সাধারণীকৃত ইন্টারফেসটি `onCancel()` এবং `onFinished()` নামে দুটি মেথড সংজ্ঞায়িত করে। অ্যানিমেশনের জন্য, নিম্নলিখিত পরিস্থিতিতে মেথডগুলো কল করা হয়:
onFinish()
অ্যানিমেশনটি কোনো বাধা ছাড়াই সম্পূর্ণ হলে এটি কার্যকর হয়।
onCancel()

stopAnimation() কল করার মাধ্যমে অথবা নতুন ক্যামেরা মুভমেন্ট শুরু করার মাধ্যমে অ্যানিমেশনটি বাধাগ্রস্ত হলে এটি কার্যকর হয়।

বিকল্পভাবে, আপনি যদি GoogleMap.stopAnimation() কল করেন, তাহলেও এটি ঘটতে পারে।

duration
অ্যানিমেশনের কাঙ্ক্ষিত সময়কাল, মিলিসেকেন্ডে, একটি int হিসেবে।

নিম্নলিখিত কোড স্নিপেটগুলিতে ক্যামেরা সরানোর কিছু প্রচলিত পদ্ধতি দেখানো হয়েছে।

কোটলিন

val sydney = LatLng(-33.88, 151.21)
val mountainView = LatLng(37.4, -122.1)

// Move the camera instantly to Sydney with a zoom of 15.
map.moveCamera(CameraUpdateFactory.newLatLngZoom(sydney, 15f))

// Zoom in, animating the camera.
map.animateCamera(CameraUpdateFactory.zoomIn())

// Zoom out to zoom level 10, animating with a duration of 2 seconds.
map.animateCamera(CameraUpdateFactory.zoomTo(10f), 2000, null)

// Construct a CameraPosition focusing on Mountain View and animate the camera to that position.
val cameraPosition = CameraPosition.Builder()
    .target(mountainView) // Sets the center of the map to Mountain View
    .zoom(17f)            // Sets the zoom
    .bearing(90f)         // Sets the orientation of the camera to east
    .tilt(30f)            // Sets the tilt of the camera to 30 degrees
    .build()              // Creates a CameraPosition from the builder
map.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition))

      

জাভা

LatLng sydney = new LatLng(-33.88,151.21);
LatLng mountainView = new LatLng(37.4, -122.1);

// Move the camera instantly to Sydney with a zoom of 15.
map.moveCamera(CameraUpdateFactory.newLatLngZoom(sydney, 15));

// Zoom in, animating the camera.
map.animateCamera(CameraUpdateFactory.zoomIn());

// Zoom out to zoom level 10, animating with a duration of 2 seconds.
map.animateCamera(CameraUpdateFactory.zoomTo(10), 2000, null);

// Construct a CameraPosition focusing on Mountain View and animate the camera to that position.
CameraPosition cameraPosition = new CameraPosition.Builder()
    .target(mountainView )      // Sets the center of the map to Mountain View
    .zoom(17)                   // Sets the zoom
    .bearing(90)                // Sets the orientation of the camera to east
    .tilt(30)                   // Sets the tilt of the camera to 30 degrees
    .build();                   // Creates a CameraPosition from the builder
map.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));