Maps SDK for Android-এর ম্যাপগুলি সহজ জেসচার ব্যবহার করে কাত ও রোটেট করা যায়। এর ফলে ব্যবহারকারীরা ম্যাপের এমন একটি ওরিয়েন্টেশন অ্যাডজাস্ট করতে পারেন যা তাদের কাছে অর্থপূর্ণ। যেকোনও জুম লেভেলে, আপনি ম্যাপ প্যান করতে বা এর পার্সপেক্টিভ পরিবর্তন করতে পারবেন। এর জন্য খুব কম ল্যাটেন্সি হয় কারণ ভেক্টর-ভিত্তিক ম্যাপ টাইলসের ফুটপ্রিন্ট ছোট হয়।
কোডের নমুনা
GitHub-এ ApiDemos রিপোজিটরি-তে একটি স্যাম্পেল আছে যা ক্যামেরা ফিচার দেখায়:
- CameraDemoActivity - Kotlin: ক্যামেরার পজিশন পরিবর্তন করা
- CameraDemoActivity - Java: ক্যামেরার পজিশন পরিবর্তন করা
ভূমিকা
ওয়েবে Google Maps-এর মতো, Android-এর জন্য Maps SDK আপনার ডিভাইসের স্ক্রিনে (একটি ফ্ল্যাট প্লেন) পৃথিবীর পৃষ্ঠ (একটি গোলক) দেখানোর জন্য মার্কেটর প্রজেকশন ব্যবহার করে। পূর্ব ও পশ্চিম দিকে, ম্যাপটি অসীমভাবে পুনরাবৃত্তি হয় কারণ পৃথিবী নির্বিঘ্নে নিজের চারপাশে ঘুরে যায়। উত্তর ও দক্ষিণ দিকে ম্যাপটি উত্তর দিকে প্রায় ৮৫ ডিগ্রি এবং দক্ষিণ দিকে ৮৫ ডিগ্রি পর্যন্ত সীমাবদ্ধ।
মনে রাখবেন: মারকেটর প্রজেকশনের অসীম উচ্চতা অক্ষাংশীয়ভাবে থাকলেও দ্রাঘিমাংশীয়ভাবে সসীম প্রস্থ থাকে। আমরা আনুমানিক +/- ৮৫ ডিগ্রিতে মার্কেটর প্রজেকশন ব্যবহার করে বেস ম্যাপের ছবি "কাট অফ" করি যাতে ম্যাপের আকার বর্গাকার হয়। এর ফলে টাইল বেছে নেওয়ার লজিক আরও সহজ হয়।
Maps SDK for Android আপনাকে ম্যাপের ক্যামেরা পরিবর্তন করে ম্যাপের ব্যাপারে ব্যবহারকারীর দৃষ্টিভঙ্গি পরিবর্তন করতে দেয়।
ক্যামেরায় পরিবর্তন করলে, আপনার যোগ করা মার্কার, ওভারলে বা অন্যান্য গ্রাফিক্সে কোনও পরিবর্তন হবে না, তবে নতুন ভিউয়ের সাথে আরও ভালভাবে মানিয়ে নিতে আপনি নিজের যোগ করা আইটেম পরিবর্তন করতে পারেন।
আপনি ম্যাপে ইউজার জেসচার শুনতে পারেন বলে, ব্যবহারকারীর অনুরোধের উত্তরে আপনি ম্যাপ পরিবর্তন করতে
পারেন। যেমন, কলব্যাক পদ্ধতি
OnMapClickListener.onMapClick() ম্যাপে একবার ট্যাপ করার
প্রতিক্রিয়া জানায়। যেহেতু পদ্ধতিটি ট্যাপ লোকেশনের অক্ষাংশ এবং দ্রাঘিমাংশ
পায়, তাই আপনি সেই পয়েন্টে প্যান বা জুম করে উত্তর দিতে পারেন।
মার্কারের বুদবুদে ট্যাপ করা বা
মার্কারে ড্র্যাগ জেসচারের উত্তর দেওয়ার জন্য একই ধরনের পদ্ধতি উপলভ্য।
এছাড়াও, আপনি ক্যামেরা মুভমেন্টের জন্য শুনতে পারেন, যাতে ক্যামেরা চলতে শুরু করলে, বর্তমানে চললে বা চলা বন্ধ করলে আপনার অ্যাপ একটি বিজ্ঞপ্তি পায়। বিস্তারিত জানতে, ক্যামেরা পরিবর্তন সংক্রান্ত ইভেন্ট-এর নির্দেশিকা দেখুন।
ক্যামেরার পজিশন
ম্যাপ ভিউকে এমনভাবে মডেল করা হয়েছে যাতে মনে হয় একটি ক্যামেরা সমতল ভূমির দিকে নিচের দিকে তাকিয়ে আছে। ক্যামেরার পজিশন (এবং সেই কারণে ম্যাপের রেন্ডারিং) নিম্নলিখিত প্রপার্টির মাধ্যমে নির্দিষ্ট করা হয়: টার্গেট (অক্ষাংশ/দ্রাঘিমাংশ লোকেশন), বেয়ারিং, টিল্ট, এবং জুম।
টার্গেট (লোকেশন)
ক্যামেরা টার্গেট হল ম্যাপের কেন্দ্রের লোকেশন, যা অক্ষাংশ ও দ্রাঘিমাংশ কোঅর্ডিনেট হিসেবে নির্দিষ্ট করা থাকে।
অক্ষাংশ -৮৫ থেকে ৮৫ ডিগ্রির মধ্যে হতে হবে, এর মধ্যে অন্তর্ভুক্ত। এই রেঞ্জের উপরে বা নিচে থাকা ভ্যালু এই রেঞ্জের মধ্যে থাকা সবচেয়ে কাছাকাছি ভ্যালুতে ক্ল্যাম্প করা হবে। যেমন, ১০০ অক্ষাংশ নির্দিষ্ট করলে, ভ্যালু ৮৫ হিসেবে সেট হয়ে যাবে। দ্রাঘিমাংশ -১৮০ থেকে ১৮০ ডিগ্রির মধ্যে হয়। এই রেঞ্জের উপরে বা নিচের ভ্যালু এমনভাবে র্যাপ করা হবে যাতে সেগুলি (-১৮০, ১৮০) রেঞ্জের মধ্যে পড়ে। যেমন, ৪৮০, ৮৪০ এবং ১২০০ সবই ১২০ ডিগ্রিতে র্যাপ করা হবে।বেয়ারিং (ওরিয়েন্টেশন)
ক্যামেরা বিয়ারিং কম্পাসের দিক নির্দিষ্ট করে, যা ম্যাপের উপরের প্রান্তের সাথে সম্পর্কিত, প্রকৃত উত্তর দিক থেকে ডিগ্রিতে পরিমাপ করা হয়। আপনি যদি ম্যাপের কেন্দ্র থেকে ম্যাপের উপরের প্রান্ত পর্যন্ত একটি উল্লম্ব রেখা টানেন, তাহলে বিয়ারিংটি প্রকৃত উত্তর দিকে ক্যামেরার হেডিং (ডিগ্রিতে পরিমাপ করা হয়) সম্পর্কিত।
বেয়ারিং ০ হলে, ম্যাপের উপরের দিকটি প্রকৃত উত্তর দিক নির্দেশ করে। বেয়ারিং ভ্যালু ৯০ মানে ম্যাপের উপরের অংশ পূর্ব দিকে (কম্পাসে ৯০ ডিগ্রি) নির্দেশ করছে। ভ্যালু ১৮০ মানে ম্যাপের সবচেয়ে উপরের অংশটি দক্ষিণ দিকে নির্দেশ করছে।
Maps API আপনাকে ম্যাপের কম্পাস পরিবর্তন করতে দেয়। যেমন, গাড়ি চালানোর সময় চালক প্রায়ই ম্যাপটি ঘুরিয়ে নেন যাতে সেটি তার ভ্রমণের দিকের সাথে সামঞ্জস্যপূর্ণ হয়, আবার হাইকাররা ম্যাপ ও কম্পাস ব্যবহার করার সময় সাধারণত ম্যাপটি এমনভাবে সেট করেন যাতে একটি উল্লম্ব রেখা উত্তর দিক নির্দেশ করে।
টিল্ট (দেখার কোণ)
টিল্ট, ম্যাপের কেন্দ্রবিন্দুর ঠিক উপরে একটি আর্কের উপর ক্যামেরার অবস্থানকে সংজ্ঞায়িত করে, যা নাদির (ক্যামেরার ঠিক নিচে নির্দেশ করা দিক) থেকে ডিগ্রিতে পরিমাপ করা হয়। ০ ভ্যালু থাকলে বুঝতে হবে যে ক্যামেরা সরাসরি নিচের দিকে তাক করা আছে। ০-এর থেকে বেশি মান থাকলে বুঝতে হবে যে ক্যামেরাটি দিগন্তের দিকে নির্দিষ্ট ডিগ্রি কোণে ঝুঁকে আছে। আপনি দেখার কোণ পরিবর্তন করলে, ম্যাপটি দৃষ্টিকোণ থেকে দেখা যায়, যেখানে দূরের ফিচারগুলি ছোট এবং কাছাকাছি ফিচারগুলি বড় করে দেখানো হয়। নিম্নলিখিত ছবিতে এটি দেখানো হয়েছে।
নিচের ছবিতে, দেখার অ্যাঙ্গেল হল ০ ডিগ্রি। প্রথম ছবিতে এর একটি স্কিম্যাটিক দেখানো হয়েছে; পজিশন ১ হল ক্যামেরা পজিশন এবং পজিশন ২ হল বর্তমান ম্যাপ পজিশন। এর নিচে ম্যাপের ফলাফল দেখানো হয়েছে।
|
|
নিচের ছবিতে, দেখার অ্যাঙ্গেল হল ৪৫ ডিগ্রি। লক্ষ্য করুন যে ক্যামেরাটি মাথার ঠিক উপরে (০ ডিগ্রি) এবং মাটি (৯০ ডিগ্রি)-র মধ্যে একটি বৃত্তচাপের অর্ধেক পথ অতিক্রম করে, ৩ পজিশনে আসে। ক্যামেরা এখনও ম্যাপের কেন্দ্রবিন্দুতে ফোকাস করে আছে, তবে 4 পজিশনে লাইন দ্বারা দেখানো এলাকাটি এখন দেখা যাচ্ছে।
|
|
এই স্ক্রিনশটের ম্যাপটি এখনও আসল ম্যাপের মতো একই পয়েন্টে কেন্দ্র করে আছে, তবে ম্যাপের উপরে আরও ফিচার দেখা যাচ্ছে। আপনি ৪৫ ডিগ্রির বেশি কোণ বাড়ানোর সাথে সাথে, ক্যামেরা ও ম্যাপ পজিশনের মধ্যে থাকা ফিচারগুলি তুলনামূলকভাবে বড় দেখায়, অন্যদিকে ম্যাপ পজিশনের বাইরে থাকা ফিচারগুলি তুলনামূলকভাবে ছোট দেখায়, এর ফলে থ্রি-ডাইমেনশনাল এফেক্ট তৈরি হয়।
জুম করুন
ক্যামেরার জুম লেভেল ম্যাপের স্কেল নির্ধারণ করে। আরও বেশি জুম লেভেলে স্ক্রিনে আরও বেশি বিবরণ দেখা যায়, অন্যদিকে কম জুম লেভেলে স্ক্রিনে আরও বেশি জায়গা দেখা যায়। জুম লেভেল ০-তে, ম্যাপের স্কেল এমন হয় যে সমগ্র পৃথিবীর প্রস্থ প্রায় ২৫৬dp (ঘনত্ব-নিরপেক্ষ পিক্সেল) হয়।
জুম লেভেল ১ বাড়ালে স্ক্রিনে পৃথিবীর প্রস্থ দ্বিগুণ হয়ে যায়। তাই N জুম লেভেলে, পৃথিবীর প্রস্থ আনুমানিক ২৫৬ * ২N dp। যেমন, জুম লেভেল ২-এ, সম্পূর্ণ পৃথিবী আনুমানিক ১০২৪dp চওড়া।
জুম লেভেল পূর্ণসংখ্যা হতে হবে না। ম্যাপে অনুমোদিত জুম লেভেলের রেঞ্জ টার্গেট, ম্যাপের ধরন ও স্ক্রিনের সাইজ সহ একাধিক বিষয়ের উপর নির্ভর করে। রেঞ্জের বাইরে থাকা যেকোনও সংখ্যাকে পরবর্তী সবচেয়ে কাছাকাছি সঠিক ভ্যালুতে পরিবর্তন করা হবে, যা সর্বনিম্ন জুম লেভেল বা সর্বোচ্চ জুম লেভেল হতে পারে। নিচের তালিকায় প্রতিটি জুম লেভেলে আপনি আনুমানিক কতটা বিস্তারিত তথ্য দেখতে পাবেন তা দেখানো হয়েছে:
- ১: বিশ্ব
- ৫: স্থলভাগ/মহাদেশ
- ১০: শহর
- ১৫: রাস্তা
- ২০: বিল্ডিং
|
|
|
ক্যামেরা সরানো
Maps API আপনাকে ম্যাপে পৃথিবীর কোন অংশ দেখা যাবে তা পরিবর্তন করতে দেয়। ক্যামেরার পজিশন পরিবর্তন করে এটি করা হয় (ম্যাপ সরানোর বিপরীতে)।
ক্যামেরা পরিবর্তন করার পরে, আপনি ক্যামেরা মুভমেন্টের ফলে পাওয়া ফলাফল অ্যানিমেট করতে পারবেন। অ্যানিমেশনটি বর্তমান ক্যামেরা অ্যাট্রিবিউট এবং নতুন ক্যামেরা অ্যাট্রিবিউটের মধ্যে ইন্টারপোলেট করে। এছাড়াও, আপনি অ্যানিমেশনের সময়সীমা নিয়ন্ত্রণ করতে পারবেন।
ক্যামেরার পজিশন পরিবর্তন করতে, আপনাকে অবশ্যই উল্লেখ করতে হবে যে আপনি CameraUpdate ব্যবহার করে ক্যামেরা কোথায়
সরাতে চান। Maps API
আপনাকে CameraUpdateFactory ব্যবহার করে
বিভিন্ন ধরনের CameraUpdate তৈরি করার অনুমতি দেয়। এইসব বিকল্প উপলভ্য:
জুম লেভেল পরিবর্তন করা এবং সর্বনিম্ন/সর্বোচ্চ জুম সেট করা
CameraUpdateFactory.zoomIn() এবং
CameraUpdateFactory.zoomOut()
আপনাকে এমন একটি CameraUpdate দেয় যা জুম লেভেল ১.০ করে পরিবর্তন করে, তবে
অন্যান্য সব প্রপার্টি একই রাখে।
CameraUpdateFactory.zoomTo(float)
আপনাকে CameraUpdate দেয় যা জুম লেভেলকে প্রদত্ত ভ্যালুতে পরিবর্তন করে,
যদিও অন্যান্য সব প্রপার্টি একই থাকে।
CameraUpdateFactory.zoomBy(float)
এবং
CameraUpdateFactory.zoomBy(float, Point)
আপনাকে CameraUpdate দেয় যা প্রদত্ত ভ্যালু অনুযায়ী জুম লেভেল বাড়ায় (বা ভ্যালু
নেগেটিভ হলে কমায়)। পরেরটি স্ক্রিনে দেওয়া পয়েন্টকে
এমনভাবে ফিক্স করে যাতে এটি একই লোকেশনে (অক্ষাংশ/দ্রাঘিমাংশ)
থাকে এবং এটি অর্জন করার জন্য এটি ক্যামেরার লোকেশন পরিবর্তন করতে পারে।
আপনি হয়ত পছন্দসই ন্যূনতম এবং/বা সর্বাধিক জুম লেভেল সেট করাকে সহায়ক বলে মনে করবেন। যেমন, আপনার অ্যাপ যদি কোনও উল্লেখযোগ্য স্থানের চারপাশে একটি নির্দিষ্ট এলাকা দেখায় বা আপনি যদি সীমিত সংখ্যক জুম লেভেল সহ একটি কাস্টম টাইল ওভারলে ব্যবহার করেন, তাহলে ব্যবহারকারীর অভিজ্ঞতা নিয়ন্ত্রণ করতে এটি কার্যকর।
Kotlin
map.setMinZoomPreference(6.0f) map.setMaxZoomPreference(14.0f)
Java
map.setMinZoomPreference(6.0f); map.setMaxZoomPreference(14.0f);
মনে রাখবেন, কিছু টেকনিক্যাল কারণে API ব্যবহারকারীদের খুব বেশি বা খুব কম জুম করার অনুমতি নাও দিতে পারে। যেমন, স্যাটেলাইট বা ভূখণ্ড বেস ম্যাপ টাইলের তুলনায় কম জুম লেভেল থাকতে পারে।
ক্যামেরার পজিশন পরিবর্তন করা হচ্ছে
সাধারণ পজিশন পরিবর্তনের জন্য দুটি সুবিধাজনক পদ্ধতি আছে।
CameraUpdateFactory.newLatLng(LatLng)
আপনাকে একটি CameraUpdate দেয় যা ক্যামেরার অক্ষাংশ ও দ্রাঘিমাংশ পরিবর্তন করে,
যদিও অন্যান্য সব প্রপার্টি অপরিবর্তিত থাকে।
CameraUpdateFactory.newLatLngZoom(LatLng, float)
আপনাকে একটি CameraUpdate দেয় যা ক্যামেরার
অক্ষাংশ, দ্রাঘিমাংশ এবং জুম পরিবর্তন করে, তবে অন্যান্য সব প্রপার্টি অপরিবর্তিত রাখে।
ক্যামেরার পজিশন পরিবর্তন করার ক্ষেত্রে সম্পূর্ণ ফ্লেক্সিবিলিটি পেতে,
CameraUpdateFactory.newCameraPosition(CameraPosition)
ব্যবহার করুন, যা আপনাকে একটি CameraUpdate দেয় যা ক্যামেরাটিকে
নির্দিষ্ট পজিশনে নিয়ে যায়। new CameraPosition() ব্যবহার করে সরাসরি অথবা CameraPosition.Builder-এর সাথে new CameraPosition.Builder() ব্যবহার করে
CameraPosition পাওয়া যেতে পারে।
প্যানিং (স্ক্রল করা)
CameraUpdateFactory.scrollBy(float, float) আপনাকে একটি CameraUpdate দেয় যা
ক্যামেরার অক্ষাংশ এবং দ্রাঘিমাংশ এমনভাবে পরিবর্তন করে যাতে ম্যাপটি নির্দিষ্ট সংখ্যক পিক্সেল দ্বারা
সরানো যায়। x-এর পজিটিভ ভ্যালু থাকলে ক্যামেরা ডানদিকে সরে যায়, ফলে মনে হয় যেন ম্যাপটি বাঁদিকে সরে গেছে। y-এর পজিটিভ
মান হলে ক্যামেরা নিচের দিকে সরে যায়, ফলে ম্যাপটি উপরের দিকে সরে গেছে বলে মনে হয়।
বিপরীতভাবে, x-এর নেগেটিভ ভ্যালুর কারণে ক্যামেরা বাঁদিকে সরে যায়, যাতে
ম্যাপটি ডানদিকে সরে গেছে বলে মনে হয় এবং y-এর নেগেটিভ ভ্যালুর কারণে
ক্যামেরা উপরের দিকে সরে যায়। ক্যামেরার বর্তমান ওরিয়েন্টেশনের সাপেক্ষে স্ক্রল করা হয়। যেমন, ক্যামেরার বিয়ারিং ৯০ ডিগ্রি হলে, পূর্ব দিক "উপরে" হবে।
সীমানা স্থির করা
ম্যাপের বাউন্ড সেট করা হচ্ছে
ক্যামেরা এমনভাবে সরানো কখনও কখনও উপযোগী হয় যাতে আগ্রহের সম্পূর্ণ এলাকাটি সর্বাধিক সম্ভাব্য
জুম লেভেলে দৃশ্যমান হয়। যেমন, ব্যবহারকারীর বর্তমান লোকেশন থেকে
পাঁচ মাইলের মধ্যে থাকা সব গ্যাস স্টেশন দেখালে, আপনি ক্যামেরা এমনভাবে
সরাতে চাইতে পারেন যাতে সেগুলি সব স্ক্রিনে দেখা যায়। এটি করতে, প্রথমে স্ক্রিনে যে
LatLngBounds দেখাতে চান তা হিসেব করুন। আপনি
তারপরে CameraUpdateFactory.newLatLngBounds(LatLngBounds bounds, int
padding) ব্যবহার করে এমন একটি CameraUpdate পেতে পারেন যা ক্যামেরার
পজিশন এমনভাবে পরিবর্তন করে যাতে প্রদত্ত LatLngBounds ম্যাপের মধ্যে সম্পূর্ণভাবে ফিট করে, নির্দিষ্ট করা প্যাডিং (পিক্সেল অনুযায়ী) বিবেচনা করে। ফেরত আসা CameraUpdate
নিশ্চিত করে যে প্রদত্ত সীমানা এবং ম্যাপের প্রান্তের মধ্যে ব্যবধান (পিক্সেল)
কমপক্ষে নির্দিষ্ট প্যাডিংয়ের সমান হবে। মনে রাখবেন, ম্যাপের টিল্ট ও
বেয়ারিং, দু'টিই ০ হবে।
Kotlin
val australiaBounds = LatLngBounds( LatLng((-44.0), 113.0), // SW bounds LatLng((-10.0), 154.0) // NE bounds ) map.moveCamera(CameraUpdateFactory.newLatLngBounds(australiaBounds, 0))
Java
LatLngBounds australiaBounds = new LatLngBounds( new LatLng(-44, 113), // SW bounds new LatLng(-10, 154) // NE bounds ); map.moveCamera(CameraUpdateFactory.newLatLngBounds(australiaBounds, 0));
কোনও এলাকার মধ্যে ম্যাপকে কেন্দ্র করা
কিছু ক্ষেত্রে, আপনি এক্সট্রিম বর্ডার অন্তর্ভুক্ত করার পরিবর্তে
বাউন্ডের মধ্যে ক্যামেরাটি কেন্দ্রে রাখতে চাইতে পারেন। যেমন, কোনও দেশের উপর ক্যামেরা ফোকাস করা
এবং একই সাথে জুম লেভেল একই রাখা। এই ক্ষেত্রে, আপনি একই ধরনের পদ্ধতি ব্যবহার করতে পারেন,
LatLngBounds তৈরি করে এবং
LatLngBounds-এর সাথে
CameraUpdateFactory.newLatLngZoom(LatLng latLng, float zoom) ব্যবহার করে।getCenter() পদ্ধতি। getCenter() পদ্ধতি LatLngBounds-এর ভৌগোলিক কেন্দ্র
ফেরত দেবে।
Kotlin
val australiaBounds = LatLngBounds( LatLng((-44.0), 113.0), // SW bounds LatLng((-10.0), 154.0) // NE bounds ) map.moveCamera(CameraUpdateFactory.newLatLngZoom(australiaBounds.center, 10f))
Java
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
আপনার পাস করা আর্গুমেন্ট থেকে ডিসপ্লে বাউন্ডারি গণনা করে।
ব্যবহারকারীর প্যানিংকে একটি নির্দিষ্ট এলাকায় সীমাবদ্ধ করা
উপরের পরিস্থিতিতে, আপনি ম্যাপের সীমা সেট করেন কিন্তু ব্যবহারকারী তারপরে এই সীমার বাইরে স্ক্রল বা প্যান করতে পারেন। পরিবর্তে, আপনি ম্যাপের ফোকাল পয়েন্টের (ক্যামেরা টার্গেট) ল্যাট/লং সেন্টার বাউন্ডকে সীমাবদ্ধ করতে পারেন, যাতে ব্যবহারকারীরা শুধুমাত্র এই সীমার মধ্যেই স্ক্রল ও প্যান করতে পারেন। যেমন, কোনও শপিং সেন্টার বা বিমানবন্দরের রিটেল অ্যাপ, ম্যাপকে নির্দিষ্ট সীমার মধ্যে সীমাবদ্ধ করতে চাইতে পারে, যাতে ব্যবহারকারীরা সেই সীমার মধ্যে স্ক্রল ও প্যান করতে পারেন।
Kotlin
// 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)
Java
// 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);
নিচের ডায়াগ্রামটি এমন একটি পরিস্থিতিকে ব্যাখ্যা করে যেখানে ক্যামেরা টার্গেটটি ভিউপোর্ট থেকে সামান্য বড় একটি এলাকার মধ্যে সীমাবদ্ধ। ক্যামেরা টার্গেট যদি নির্দিষ্ট সীমার মধ্যে থাকে, তাহলে ব্যবহারকারী স্ক্রল ও প্যান করতে পারবেন। ক্রস চিহ্নটি ক্যামেরার টার্গেটকে দেখায়:
ম্যাপ সবসময় ভিউপোর্ট পূরণ করে, এমনকি এর ফলে ভিউপোর্ট যদি এমন এলাকা দেখায় যা নির্দিষ্ট সীমার বাইরে। যেমন, আপনি যদি বাউন্ডেড এরিয়ার কোনও কোণে ক্যামেরা টার্গেট পজিশন করেন, তাহলে কোণের বাইরের অংশটি ভিউপোর্টেই দেখা যাবে, কিন্তু ব্যবহারকারীরা সেই অংশে আর স্ক্রল করতে পারবেন না। নিচের ডায়াগ্রাম থেকে এই পরিস্থিতি সম্পর্কে আরও ভালভাবে বুঝতে পারবেন। ক্রস চিহ্নটি ক্যামেরা নির্দেশ করে
নিচের ডায়াগ্রামে, ক্যামেরা টার্গেটের খুব সীমিত বাউন্ড আছে, যা ব্যবহারকারীকে ম্যাপ স্ক্রল বা প্যান করার খুব কম সুযোগ দেয়। ক্রস চিহ্নটি ক্যামেরার টার্গেটকে দেখায়:
ক্যামেরা ভিউ আপডেট করা হচ্ছে
ম্যাপে CameraUpdate প্রয়োগ করতে, আপনি ক্যামেরা
তৎক্ষণাৎ সরাতে অথবা মসৃণভাবে অ্যানিমেট করতে পারেন। প্রদত্ত CameraUpdate-এর সাহায্যে ক্যামেরাটি
তৎক্ষণাৎ সরাতে, আপনি
GoogleMap.moveCamera(CameraUpdate) কল করতে পারেন।
পরিবর্তন অ্যানিমেট করার মাধ্যমে, আপনি ব্যবহারকারীর অভিজ্ঞতা আরও আনন্দদায়ক করে তুলতে পারেন,
বিশেষ করে ছোট ছোট মুভের ক্ষেত্রে। কল করার পরিবর্তে এটি করতে
GoogleMap.moveCamera
কল করুন
GoogleMap.animateCamera।
ম্যাপটি নতুন অ্যাট্রিবিউটে মসৃণভাবে সরে যাবে। এই পদ্ধতির সবচেয়ে বিস্তারিত ফর্ম,
GoogleMap.animateCamera(cameraUpdate, duration, callback),
তিনটি আর্গুমেন্ট অফার করে:
cameraUpdateCameraUpdateক্যামেরা কোথায় নিয়ে যেতে হবে তা বর্ণনা করে।callback- এমন একটি অবজেক্ট যা
GoogleMap.CancellableCallbackপ্রয়োগ করে। টাস্ক ম্যানেজ করার জন্য এই সাধারণ ইন্টারফেস দুটি পদ্ধতিকে সংজ্ঞায়িত করে `onCancel()` এবং `onFinished()`. অ্যানিমেশনের জন্য, নিম্নলিখিত পরিস্থিতিতে পদ্ধতিগুলি কল করা হয়:onFinish()- অ্যানিমেশন কোনও বাধা ছাড়াই সম্পূর্ণ হলে ইনভোক করা হয়।
onCancel()-
অ্যানিমেশন বিঘ্নিত হলে কল করা হয়
stopAnimation()অথবা নতুন ক্যামেরা মুভমেন্ট শুরু করা হয়।বিকল্প হিসেবে, আপনি
GoogleMap.stopAnimation()-এ কল করলেও এটি হতে পারে।
duration- অ্যানিমেশনের কাঙ্ক্ষিত সময়সীমা, মিলিসেকেন্ডে,
intহিসেবে।
ক্যামেরা সরানোর কিছু সাধারণ উপায় নিম্নলিখিত কোড স্নিপেটে দেখানো হয়েছে।
Kotlin
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))
Java
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));