অ্যান্ড্রয়েডের জন্য ম্যাপস এসডিকে-তে থাকা মানচিত্রগুলিকে সহজ অঙ্গভঙ্গির মাধ্যমে কাত এবং ঘোরানো যেতে পারে, যা ব্যবহারকারীদের তাদের জন্য বোধগম্য ওরিয়েন্টেশনের মাধ্যমে মানচিত্রটি সামঞ্জস্য করার ক্ষমতা দেয়। যেকোনো জুম স্তরে, আপনি মানচিত্রটি প্যান করতে পারেন, অথবা ভেক্টর-ভিত্তিক মানচিত্র টাইলসের ছোট ফুটপ্রিন্টের জন্য খুব কম লেটেন্সিতে এর দৃষ্টিকোণ পরিবর্তন করতে পারেন।
কোড নমুনা
GitHub-এর ApiDemos সংগ্রহস্থলে একটি নমুনা রয়েছে যা ক্যামেরার বৈশিষ্ট্যগুলি প্রদর্শন করে:
- ক্যামেরাডেমোঅ্যাক্টিভিটি - কোটলিন : ক্যামেরার অবস্থান পরিবর্তন করা
- ক্যামেরাডেমোঅ্যাক্টিভিটি - জাভা : ক্যামেরার অবস্থান পরিবর্তন করা
ভূমিকা
ওয়েবে Google Maps-এর মতো, Android-এর জন্য Maps SDK আপনার ডিভাইসের স্ক্রিনে (একটি সমতল সমতল) পৃথিবীর পৃষ্ঠ (একটি গোলক) উপস্থাপন করে Mercator প্রক্ষেপণ ব্যবহার করে। পূর্ব এবং পশ্চিম দিকে, পৃথিবী নির্বিঘ্নে নিজের উপর আবর্তিত হওয়ার সাথে সাথে মানচিত্রটি অসীমভাবে পুনরাবৃত্তি হয়। উত্তর এবং দক্ষিণ দিকে মানচিত্রটি প্রায় 85 ডিগ্রি উত্তর এবং 85 ডিগ্রি দক্ষিণে সীমাবদ্ধ।
দ্রষ্টব্য: একটি Mercator প্রক্ষেপণের দ্রাঘিমাংশে একটি সীমিত প্রস্থ থাকে কিন্তু অক্ষাংশে একটি অসীম উচ্চতা থাকে। আমরা Mercator প্রক্ষেপণ ব্যবহার করে প্রায় +/- 85 ডিগ্রিতে বেস ম্যাপ চিত্রাবলী "কাটা" করি যাতে ফলাফলটি বর্গাকার হয়, যা টাইল নির্বাচনের জন্য সহজ যুক্তির অনুমতি দেয়।
অ্যান্ড্রয়েডের জন্য ম্যাপস SDK আপনাকে ম্যাপের ক্যামেরা পরিবর্তন করে ম্যাপের প্রতি ব্যবহারকারীর দৃষ্টিভঙ্গি পরিবর্তন করতে দেয়।
ক্যামেরায় পরিবর্তন করলে মার্কার, ওভারলে বা আপনার যোগ করা অন্যান্য গ্রাফিক্সে কোনও পরিবর্তন হবে না, যদিও নতুন ভিউয়ের সাথে আরও ভালোভাবে মানানসই করার জন্য আপনি আপনার সংযোজনগুলি পরিবর্তন করতে চাইতে পারেন।
যেহেতু আপনি মানচিত্রে ব্যবহারকারীর অঙ্গভঙ্গি শুনতে পারেন, তাই ব্যবহারকারীর অনুরোধের প্রতিক্রিয়ায় আপনি মানচিত্র পরিবর্তন করতে পারেন। উদাহরণস্বরূপ, কলব্যাক পদ্ধতি OnMapClickListener.onMapClick() মানচিত্রে একবার ট্যাপে সাড়া দেয়। যেহেতু পদ্ধতিটি ট্যাপ অবস্থানের অক্ষাংশ এবং দ্রাঘিমাংশ গ্রহণ করে, আপনি সেই বিন্দুতে প্যানিং বা জুম করে প্রতিক্রিয়া জানাতে পারেন। মার্কারের বুদ্বুদে ট্যাপের প্রতিক্রিয়া জানানোর জন্য বা মার্কারে টেনে আনার অঙ্গভঙ্গির প্রতিক্রিয়া জানানোর জন্য অনুরূপ পদ্ধতি উপলব্ধ।
আপনি ক্যামেরার নড়াচড়াও শুনতে পারেন, যাতে ক্যামেরাটি চলতে শুরু করলে, বর্তমানে চলতে থাকলে বা থামলে আপনার অ্যাপটি একটি বিজ্ঞপ্তি পায়। বিস্তারিত জানার জন্য, ক্যামেরা পরিবর্তন ইভেন্টের নির্দেশিকা দেখুন।
ক্যামেরার অবস্থান
মানচিত্রের দৃশ্যটি একটি সমতল সমতলে নিচের দিকে তাকিয়ে থাকা ক্যামেরার মতো মডেল করা হয়েছে। ক্যামেরার অবস্থান (এবং তাই মানচিত্রের রেন্ডারিং) নিম্নলিখিত বৈশিষ্ট্য দ্বারা নির্দিষ্ট করা হয়: লক্ষ্য (অক্ষাংশ/দ্রাঘিমাংশ অবস্থান) , বিয়ারিং , টিল্ট এবং জুম ।
লক্ষ্য (অবস্থান)
ক্যামেরা টার্গেট হল মানচিত্রের কেন্দ্রের অবস্থান, যা অক্ষাংশ এবং দ্রাঘিমাংশ স্থানাঙ্ক হিসাবে নির্দিষ্ট করা হয়েছে।
অক্ষাংশ -৮৫ থেকে ৮৫ ডিগ্রির মধ্যে হতে পারে, যার মধ্যে অন্তর্ভুক্তি রয়েছে। এই পরিসরের উপরে বা নীচের মানগুলি এই পরিসরের মধ্যে নিকটতম মানের সাথে সংযুক্ত করা হবে। উদাহরণস্বরূপ, ১০০ অক্ষাংশ নির্দিষ্ট করলে মানটি ৮৫ এ সেট করা হবে। দ্রাঘিমাংশ -১৮০ এবং ১৮০ ডিগ্রির মধ্যে, অন্তর্ভুক্তি রয়েছে। এই পরিসরের উপরে বা নীচের মানগুলি এমনভাবে মোড়ানো হবে যাতে তারা (-১৮০, ১৮০) পরিসরের মধ্যে পড়ে। উদাহরণস্বরূপ, ৪৮০, ৮৪০ এবং ১২০০ সবগুলি ১২০ ডিগ্রিতে মোড়ানো হবে।বিয়ারিং (অভিমুখীকরণ)
ক্যামেরা বিয়ারিং কম্পাসের দিক নির্দেশ করে, যা মানচিত্রের উপরের প্রান্তের সাথে সম্পর্কিত, প্রকৃত উত্তর থেকে ডিগ্রিতে পরিমাপ করা হয়। যদি আপনি মানচিত্রের কেন্দ্র থেকে মানচিত্রের উপরের প্রান্তে একটি উল্লম্ব রেখা আঁকেন, তাহলে বিয়ারিংটি প্রকৃত উত্তরের সাপেক্ষে ক্যামেরার শিরোনামের (ডিগ্রিতে পরিমাপ করা) সাথে সম্পর্কিত হবে।
০ এর বেয়ারিং মানে মানচিত্রের উপরের অংশটি প্রকৃত উত্তর দিকে নির্দেশ করে। ৯০ এর বেয়ারিং মানে মানচিত্রের উপরের অংশটি পূর্ব দিকে নির্দেশ করে (কম্পাসে ৯০ ডিগ্রি)। ১৮০ এর মান হল মানচিত্রের উপরের অংশটি দক্ষিণ দিকে নির্দেশ করে।
ম্যাপস এপিআই আপনাকে একটি মানচিত্রের বিয়ারিং পরিবর্তন করতে দেয়। উদাহরণস্বরূপ, গাড়ি চালানোর সময় কেউ প্রায়শই তাদের ভ্রমণের দিকের সাথে সামঞ্জস্যপূর্ণ করার জন্য একটি রোড ম্যাপ ঘুরিয়ে দেয়, অন্যদিকে হাইকাররা একটি মানচিত্র এবং কম্পাস ব্যবহার করে সাধারণত মানচিত্রটিকে এমনভাবে নির্দেশ করে যাতে একটি উল্লম্ব রেখা উত্তর দিকে নির্দেশ করে।
টিল্ট (দেখার কোণ)
কাত হওয়ার মাধ্যমে মানচিত্রের কেন্দ্রের অবস্থানের ঠিক উপরে একটি বৃত্তের উপর ক্যামেরার অবস্থান নির্ধারণ করা হয়, যা নাদির (ক্যামেরার ঠিক নীচে নির্দেশিত দিক) থেকে ডিগ্রীতে পরিমাপ করা হয়। ০ এর মান সরাসরি নিচের দিকে নির্দেশিত ক্যামেরার সাথে মিলে যায়। ০ এর বেশি মান দিগন্তের দিকে নির্দিষ্ট সংখ্যক ডিগ্রি দ্বারা পিচ করা ক্যামেরার সাথে মিলে যায়। যখন আপনি দেখার কোণ পরিবর্তন করেন, তখন মানচিত্রটি দৃষ্টিকোণ থেকে দেখা যায়, দূরবর্তী বৈশিষ্ট্যগুলি ছোট দেখায় এবং কাছাকাছি বৈশিষ্ট্যগুলি বড় দেখায়। নিম্নলিখিত চিত্রগুলি এটি প্রদর্শন করে।
নিচের ছবিতে, দেখার কোণ ০ ডিগ্রি। প্রথম ছবিতে এর একটি পরিকল্পিত চিত্র দেখানো হয়েছে; অবস্থান ১ হল ক্যামেরার অবস্থান, এবং অবস্থান ২ হল বর্তমান মানচিত্রের অবস্থান। ফলাফলের মানচিত্রটি নীচে দেখানো হয়েছে।
নিচের ছবিতে, দেখার কোণ ৪৫ ডিগ্রি। লক্ষ্য করুন যে ক্যামেরাটি সোজা মাথার উপরে (০ ডিগ্রি) এবং ভূমির (৯০ ডিগ্রি) মাঝখানে একটি বৃত্ত বরাবর অর্ধেক পথ ধরে ৩ নম্বর অবস্থানে চলে যাচ্ছে। ক্যামেরাটি এখনও মানচিত্রের কেন্দ্রবিন্দুতে নির্দেশ করছে, কিন্তু ৪ নম্বর অবস্থানে রেখা দ্বারা প্রতিনিধিত্ব করা এলাকাটি এখন দৃশ্যমান।
এই স্ক্রিনশটের মানচিত্রটি এখনও মূল মানচিত্রের মতো একই বিন্দুতে কেন্দ্রীভূত, তবে মানচিত্রের শীর্ষে আরও বৈশিষ্ট্য উপস্থিত হয়েছে। আপনি যখন 45 ডিগ্রির বেশি কোণ বাড়ান, তখন ক্যামেরা এবং মানচিত্রের অবস্থানের মধ্যে থাকা বৈশিষ্ট্যগুলি আনুপাতিকভাবে বড় দেখায়, যখন মানচিত্রের অবস্থানের বাইরের বৈশিষ্ট্যগুলি আনুপাতিকভাবে ছোট দেখায়, যা একটি ত্রিমাত্রিক প্রভাব তৈরি করে।
জুম
ক্যামেরার জুম লেভেল মানচিত্রের স্কেল নির্ধারণ করে। বড় জুম লেভেলে স্ক্রিনে আরও বিস্তারিত দেখা যায়, অন্যদিকে ছোট জুম লেভেলে স্ক্রিনে বিশ্বের আরও বেশি কিছু দেখা যায়। জুম লেভেল 0 এ, মানচিত্রের স্কেল এমন যে সমগ্র বিশ্বের প্রস্থ প্রায় 256dp ( ঘনত্ব-স্বাধীন পিক্সেল )।
জুম লেভেল ১ বাড়ালে স্ক্রিনের জগতের প্রস্থ দ্বিগুণ হয়। অতএব জুম লেভেল N-এ, জগতের প্রস্থ প্রায় ২৫৬ * ২ N dp। উদাহরণস্বরূপ, জুম লেভেল ২-এ, সমগ্র জগতের প্রস্থ প্রায় ১০২৪ dp।
জুম লেভেলটি পূর্ণসংখ্যা হতে হবে না। মানচিত্র দ্বারা অনুমোদিত জুম লেভেলের পরিসর লক্ষ্য, মানচিত্রের ধরণ এবং স্ক্রিনের আকার সহ বেশ কয়েকটি বিষয়ের উপর নির্ভর করে। রেঞ্জের বাইরে থাকা যেকোনো সংখ্যা পরবর্তী নিকটতম বৈধ মানে রূপান্তরিত হবে, যা সর্বনিম্ন জুম লেভেল বা সর্বোচ্চ জুম লেভেল হতে পারে। নিম্নলিখিত তালিকাটি প্রতিটি জুম লেভেলে আপনি যে আনুমানিক স্তরের বিশদ দেখতে আশা করতে পারেন তা দেখায়:
- ১: বিশ্ব
- ৫: স্থলভাগ/মহাদেশ
- ১০: শহর
- ১৫: রাস্তাঘাট
- ২০: ভবন
ক্যামেরা সরানো হচ্ছে
ম্যাপস এপিআই আপনাকে মানচিত্রে বিশ্বের কোন অংশ দৃশ্যমান তা পরিবর্তন করতে দেয়। এটি ক্যামেরার অবস্থান পরিবর্তন করে (মানচিত্র সরানোর পরিবর্তে) অর্জন করা হয়।
যখন আপনি ক্যামেরা পরিবর্তন করেন, তখন আপনার কাছে ক্যামেরার গতিবিধি অ্যানিমেশন করার বিকল্প থাকে। অ্যানিমেশনটি বর্তমান ক্যামেরা বৈশিষ্ট্য এবং নতুন ক্যামেরা বৈশিষ্ট্যের মধ্যে ইন্টারপোলেট হয়। আপনি অ্যানিমেশনের সময়কালও নিয়ন্ত্রণ করতে পারেন।
ক্যামেরার অবস্থান পরিবর্তন করতে, আপনাকে CameraUpdate ব্যবহার করে ক্যামেরাটি কোথায় সরাতে চান তা নির্দিষ্ট করতে হবে। Maps API আপনাকে CameraUpdateFactory ব্যবহার করে বিভিন্ন ধরণের CameraUpdate তৈরি করতে দেয়। নিম্নলিখিত বিকল্পগুলি উপলব্ধ:
জুম লেভেল পরিবর্তন করা এবং সর্বনিম্ন/সর্বোচ্চ জুম সেট করা
CameraUpdateFactory.zoomIn() এবং CameraUpdateFactory.zoomOut() আপনাকে একটি CameraUpdate দেয় যা জুম লেভেল 1.0 দ্বারা পরিবর্তন করে, এবং অন্যান্য সমস্ত বৈশিষ্ট্য একই রাখে।
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);
মনে রাখবেন যে কিছু প্রযুক্তিগত কারণ রয়েছে যা API ব্যবহারকারীদের খুব কম বা খুব বেশি জুম করার অনুমতি দিতে বাধা দিতে পারে। উদাহরণস্বরূপ, স্যাটেলাইট বা ভূখণ্ডের বেস ম্যাপ টাইলসের তুলনায় সর্বোচ্চ জুম কম থাকতে পারে।
ক্যামেরার অবস্থান পরিবর্তন করা হচ্ছে
সাধারণ অবস্থান পরিবর্তনের জন্য দুটি সুবিধাজনক পদ্ধতি রয়েছে। 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 মান ক্যামেরাটিকে উপরে সরাতে বাধ্য করে। স্ক্রোলিং ক্যামেরার বর্তমান অভিমুখের সাথে সম্পর্কিত। উদাহরণস্বরূপ, যদি ক্যামেরাটির বেয়ারিং 90 ডিগ্রি থাকে, তাহলে পূর্ব "উপরে"।
সীমানা নির্ধারণ
মানচিত্রের সীমানা নির্ধারণ
কখনও কখনও ক্যামেরাটি এমনভাবে সরানো দরকারী যাতে সর্বাধিক সম্ভাব্য জুম স্তরে আগ্রহের একটি সম্পূর্ণ এলাকা দৃশ্যমান হয়। উদাহরণস্বরূপ, যদি আপনি ব্যবহারকারীর বর্তমান অবস্থান থেকে পাঁচ মাইলের মধ্যে সমস্ত গ্যাস স্টেশন প্রদর্শন করেন, তাহলে আপনি ক্যামেরাটি এমনভাবে সরাতে চাইতে পারেন যাতে সেগুলি স্ক্রিনে দৃশ্যমান হয়। এটি করার জন্য, প্রথমে আপনি যে 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);
নিচের চিত্রটি এমন একটি দৃশ্যকল্প চিত্রিত করে যখন ক্যামেরা টার্গেটটি ভিউপোর্টের চেয়ে সামান্য বড় এলাকায় সীমাবদ্ধ থাকে। ব্যবহারকারী স্ক্রোল এবং প্যান করতে পারেন, তবে ক্যামেরা টার্গেটটি সীমানা এলাকার মধ্যে থাকে। ক্রসটি ক্যামেরা টার্গেটকে প্রতিনিধিত্ব করে:
মানচিত্রটি সর্বদা ভিউপোর্টটি পূরণ করে, এমনকি যদি এর ফলে ভিউপোর্টটি নির্ধারিত সীমানার বাইরের অঞ্চলগুলি দেখায়। উদাহরণস্বরূপ, যদি আপনি ক্যামেরা টার্গেটটিকে সীমানা এলাকার একটি কোণে রাখেন, তাহলে কোণার বাইরের অঞ্চলটি ভিউপোর্টে দৃশ্যমান হবে কিন্তু ব্যবহারকারীরা সেই অঞ্চলে আরও স্ক্রোল করতে পারবেন না। নিম্নলিখিত চিত্রটি এই দৃশ্যটি চিত্রিত করে। ক্রসটি ক্যামেরা টার্গেটকে প্রতিনিধিত্ব করে:
নিচের চিত্রটিতে, ক্যামেরা টার্গেটের একটি খুব সীমিত সীমা রয়েছে, যা ব্যবহারকারীকে মানচিত্রটি স্ক্রোল বা প্যান করার খুব কম সুযোগ দেয়। ক্রসটি ক্যামেরা টার্গেটকে প্রতিনিধিত্ব করে:
ক্যামেরা ভিউ আপডেট করা হচ্ছে
মানচিত্রে একটি 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));