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

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

iOS-এর জন্য Maps SDK ব্যবহার করে, আপনি ম্যাপের ক্যামেরা পরিবর্তন করার মাধ্যমে ব্যবহারকারীর দেখার দৃষ্টিকোণ পরিবর্তন করতে পারেন।

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

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

মানচিত্রের দৃশ্য

iOS-এর জন্য Maps SDK আপনার ডিভাইসের স্ক্রিনে (একটি সমতল তল) পৃথিবীর পৃষ্ঠকে (একটি গোলক) উপস্থাপন করার জন্য মারকেটর প্রজেকশন ব্যবহার করে।

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

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

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

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

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

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

দিক (অভিমুখ)

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

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

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

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

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

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

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

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

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

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

জুম

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

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

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

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

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

GMSCameraPosition অবজেক্টটি ব্যবহার করে ক্যামেরার প্রাথমিক অবস্থান নির্ধারণ করুন, যা আপনাকে লক্ষ্যবস্তুর অক্ষাংশ ও দ্রাঘিমাংশের পাশাপাশি বেয়ারিং, টিল্ট এবং জুম সেট করার সুবিধা দেয়।

ক্যামেরার প্রাথমিক অবস্থান নির্ধারণ করতে, একটি GMSMapViewOptions অবজেক্ট তৈরি করুন এবং এর camera প্রপার্টিকে GMSCameraPosition এ সেট করুন। এরপর আপনার অপশনগুলো GMSMapView কনভেনিয়েন্স কনস্ট্রাক্টরে পাস করুন।

সুইফট

let options = GMSMapViewOptions()
options.camera = GMSCameraPosition.camera(withLatitude: -33.8683, longitude: 151.2086, zoom: 16)
let mapView = GMSMapView(options:options)

উদ্দেশ্য-সি

GMSMapViewOptions *options = [[GMSMapViewOptions alloc] init];
options.camera = [GMSCameraPosition cameraWithLatitude:-33.8683
                                                        longitude:151.2086
                                                             zoom:16];
GMSMapView *mapView = [[GMSMapView alloc] initWithOptions:options];

আপনি ডিফল্ট UIView init মেথড ব্যবহার করেও GMSMapView অবজেক্টটি তৈরি করতে পারেন। এক্ষেত্রে, ক্যামেরার অবস্থান ডিফল্ট জায়গা থেকে শুরু হয় এবং আপনি তৈরির পরে তা পরিবর্তন করতে পারেন।

সুইফট

let options = GMSMapViewOptions()
options.frame = self.view.bounds
let mapView = GMSMapView(options:options)

উদ্দেশ্য-সি

GMSMapViewOptions *options = [[GMSMapViewOptions alloc] init];
options.frame = self.view.bounds;
GMSMapView *mapView = [[GMSMapView alloc] initWithOptions:options];

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

আপনি প্রোগ্রাম্যাটিকভাবে ক্যামেরার অবস্থান পরিবর্তন করে এর অবস্থান, বিয়ারিং, টিল্ট এবং জুম সেট করতে পারেন। যদিও GMSMapView ক্যামেরার অবস্থান পরিবর্তন করার জন্য বেশ কয়েকটি মেথড প্রদান করে, তবে সাধারণত GMSCameraPosition বা GMSCameraUpdate ব্যবহার করা হয়।

  • GMSCameraPosition এমন প্রোপার্টি ও মেথড রয়েছে যা ব্যবহার করে ক্যামেরার প্রতিটি পজিশন প্যারামিটার—টার্গেট, বেয়ারিং, টিল্ট এবং জুম—পরিবর্তন করা যায়।

  • GMSCameraUpdate আপনাকে টার্গেট, বেয়ারিং, টিল্ট এবং জুম পরিবর্তন করার সুবিধা দেয় এবং এতে স্ক্রলিং, অ্যাডভান্সড জুমিং, পূর্বনির্ধারিত সীমার মধ্যে ক্যামেরাকে কেন্দ্রে আনা এবং আরও অনেক কিছুর জন্য অতিরিক্ত সুবিধাজনক পদ্ধতিও রয়েছে।

যখন আপনি ক্যামেরাটি সরান, তখন আপনি ক্যামেরাটিকে নতুন অবস্থানে 'স্ন্যাপ' করতে পারেন, যার অর্থ কোনো অ্যানিমেশন হবে না, অথবা নড়াচড়াটিকে অ্যানিমেট করতে পারেন। উদাহরণস্বরূপ, যদি আপনি ক্যামেরার লক্ষ্যস্থানের পরিবর্তনকে অ্যানিমেট করেন, তাহলে অ্যানিমেশনটি আগের অবস্থান থেকে নতুন অবস্থানে প্যান করবে।

অ্যানিমেশনটি বর্তমান এবং নতুন ক্যামেরা অ্যাট্রিবিউটের মধ্যে ইন্টারপোলেট করে। আপনি কোর অ্যানিমেশন ব্যবহার করে অ্যানিমেশনটির সময়কাল নিয়ন্ত্রণ করতে পারেন।

GMSCameraPosition ব্যবহার করুন

GMSCameraPosition ব্যবহার করে ক্যামেরা পরিবর্তন করতে, আপনাকে একটি নতুন অবজেক্ট তৈরি করতে হবে অথবা একটি বিদ্যমান অবজেক্ট কপি করে সেটিকে GMSMapView অবজেক্টে সেট করতে হবে। অ্যানিমেশন সহ বা অ্যানিমেশন ছাড়াই ক্যামেরাকে নতুন অবস্থানে স্ন্যাপ করতে GMSCameraPosition অবজেক্টটি ব্যবহার করুন।

অক্ষাংশ, দ্রাঘিমাংশ, জুম, বিয়ারিং এবং ভিউয়িং অ্যাঙ্গেলের মতো ক্যামেরার যেকোনো বৈশিষ্ট্য কনফিগার করতে একটি GMSCameraPosition অবজেক্ট ব্যবহার করুন। এরপর সেই অবজেক্টটি ব্যবহার করে GMSMapView এর camera প্রপার্টি সেট করতে হয়।

সুইফট

let fancy = GMSCameraPosition(
  latitude: -33,
  longitude: 151,
  zoom: 6,
  bearing: 270,
  viewingAngle: 45
)
mapView.camera = fancy
      

উদ্দেশ্য-সি

GMSCameraPosition *fancy = [GMSCameraPosition cameraWithLatitude:-33.8683
                                                       longitude:151.2086
                                                            zoom:6
                                                         bearing:30
                                                    viewingAngle:45];
[mapView setCamera:fancy];
      

যে কোনো GMSCameraPosition প্রপার্টি যা আপনি তার ডিফল্ট মানে সেট করতে চান, তা বাদ দিন।

নড়াচড়াটি অ্যানিমেট করতে, camera প্রপার্টি সেট করার পরিবর্তে animateToCameraPosition: মেথডটি ব্যবহার করুন।

GMSCameraUpdate ব্যবহার করুন

GMSCameraUpdate আপনাকে ক্যামেরার অবস্থান আপডেট করতে এবং সেই নতুন অবস্থানে স্ন্যাপ-টু (snap-to) নাকি অ্যানিমেট-টু (animate-to) হবে তা বেছে নিতে দেয়। GMSCameraUpdate এর সুবিধা হলো এর স্বাচ্ছন্দ্য। আপনি GMSCameraUpdate এর মতো একই কাজগুলো করার জন্য GMSCameraPosition ব্যবহার করতে পারেন, কিন্তু GMSCameraUpdate ক্যামেরা পরিচালনাকে আরও সহজ করার জন্য অতিরিক্ত সহায়ক মেথড (helper methods) প্রদান করে।

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

বিকল্পভাবে, zoomIn: মেথড ব্যবহার করে একটি GMSCameraUpdate অবজেক্ট তৈরি করুন। এরপর, GMSCameraUpdate অবজেক্টটি GMSMapView এর animateWithCameraUpdate: মেথডে পাস করে ক্যামেরাটি আপডেট করুন।

সুইফট

// Zoom in one zoom level
let zoomCamera = GMSCameraUpdate.zoomIn()
mapView.animate(with: zoomCamera)
      

উদ্দেশ্য-সি

// Zoom in one zoom level
GMSCameraUpdate *zoomCamera = [GMSCameraUpdate zoomIn];
[mapView animateWithCameraUpdate:zoomCamera];
      

এর পরিবর্তে ক্যামেরাটিকে নতুন অবস্থানে স্ন্যাপ করতে GMSMapView এর moveCamera: মেথডটি ব্যবহার করুন।

পরবর্তী উদাহরণে, আপনি GMSCameraUpdate ব্যবহার করে ক্যামেরাটিকে ভ্যাঙ্কুভারের কেন্দ্রে আনার জন্য এর সঞ্চালনকে অ্যানিমেট করবেন।

সুইফট

// Center the camera on Vancouver, Canada
let vancouver = CLLocationCoordinate2D(latitude: 49.26, longitude: -123.11)
let vancouverCam = GMSCameraUpdate.setTarget(vancouver)
mapView.animate(with: vancouverCam)
      

উদ্দেশ্য-সি

// Center the camera on Vancouver, Canada
CLLocationCoordinate2D vancouver = CLLocationCoordinate2DMake(49.26, -123.11);
GMSCameraUpdate *vancouverCam = [GMSCameraUpdate setTarget:vancouver];
[mapView animateWithCameraUpdate:vancouverCam];
      

একটি GMSCameraUpdate অবজেক্ট তৈরি করুন

এর যেকোনো একটি মেথড ব্যবহার করে একটি GMSCameraUpdate অবজেক্ট তৈরি করুন।

zoomIn: এবং zoomOut:
অন্যান্য সমস্ত বৈশিষ্ট্য অপরিবর্তিত রেখে বর্তমান জুম লেভেল ১.০ পরিবর্তন করুন।
zoomTo:
অন্যান্য সমস্ত বৈশিষ্ট্য অপরিবর্তিত রেখে জুম স্তরকে প্রদত্ত মানে পরিবর্তন করে।
zoomBy:
প্রদত্ত মান অনুযায়ী জুম লেভেল বাড়ায় (অথবা মান ঋণাত্মক হলে কমায়)।
zoomBy:atPoint:
স্ক্রিনে নির্দিষ্ট বিন্দুটির অবস্থান অপরিবর্তিত রেখে, প্রদত্ত মান অনুযায়ী জুম লেভেল বৃদ্ধি করে (অথবা মান ঋণাত্মক হলে হ্রাস করে)।
setTarget:
ক্যামেরার অক্ষাংশ ও দ্রাঘিমাংশ পরিবর্তন করে, তবে অন্যান্য সমস্ত বৈশিষ্ট্য অপরিবর্তিত রাখে।
setTarget:zoom:
ক্যামেরার অক্ষাংশ, দ্রাঘিমাংশ এবং জুম পরিবর্তন করে, তবে অন্যান্য সমস্ত বৈশিষ্ট্য অপরিবর্তিত রাখে।
setCamera:
একটি নতুন GMSCameraPosition সেট করে।
scrollByX:Y:
ক্যামেরার অক্ষাংশ ও দ্রাঘিমাংশ পরিবর্তন করে মানচিত্রটিকে নির্দিষ্ট সংখ্যক পয়েন্ট সরানো হয়। একটি ধনাত্মক x মান ক্যামেরাটিকে ডানদিকে সরায়, ফলে মানচিত্রটি বামদিকে সরে গেছে বলে মনে হয়। একটি ধনাত্মক y মান ক্যামেরাটিকে নিচের দিকে সরায়, ফলে মানচিত্রটি উপরের দিকে সরে গেছে বলে মনে হয়। এই স্ক্রলিং ক্যামেরার বর্তমান বেয়ারিং-এর সাপেক্ষে হয়। উদাহরণস্বরূপ, যদি ক্যামেরার বেয়ারিং ৯০ ডিগ্রি হয়, তাহলে পূর্ব দিক হলো "উপরের দিক"।
fitBounds:
সর্বোচ্চ সম্ভাব্য জুম লেভেলে, ক্যামেরাকে এমনভাবে রূপান্তরিত করে যাতে নির্দিষ্ট সীমানাটি স্ক্রিনের কেন্দ্রে চলে আসে। সীমানাগুলোতে ডিফল্টভাবে ৬৪ পয়েন্টের একটি প্যাডিং প্রয়োগ করে।
fitBounds:withPadding:
সর্বোচ্চ সম্ভাব্য জুম লেভেলে, নির্দিষ্ট সীমানাকে স্ক্রিনের কেন্দ্রে আনার জন্য ক্যামেরাকে রূপান্তরিত করে। বাউন্ডিং বক্সের সমস্ত দিকে একই প্যাডিং (পয়েন্টে) নির্দিষ্ট করতে এই পদ্ধতিটি ব্যবহার করুন।
fitBounds:withEdgeInsets:
সর্বোচ্চ সম্ভাব্য জুম লেভেলে, নির্দিষ্ট সীমানাকে স্ক্রিনের কেন্দ্রে আনার জন্য ক্যামেরাকে রূপান্তরিত করে। UIEdgeInsets ব্যবহার করে, আপনি বাউন্ডিং বক্সের প্রতিটি পাশের জন্য আলাদাভাবে প্যাডিং নির্দিষ্ট করতে পারেন।

একটিমাত্র প্রপার্টি পরিবর্তন করতে GMSMapView ব্যবহার করুন

GMSMapView এমন বেশ কিছু মেথড রয়েছে যা আপনাকে GMSCameraPosition অবজেক্ট বা GMSCameraUpdate অবজেক্ট ব্যবহার না করেই ক্যামেরা সরাতে দেয়। animateToLocation: বা animateToZoom: এর মতো এই মেথডগুলোর সাহায্যে আপনি ক্যামেরার যেকোনো একটি প্রপার্টিতে পরিবর্তন অ্যানিমেট করতে পারেন।

উদাহরণস্বরূপ, ক্যামেরার টিল্ট পরিবর্তন অ্যানিমেট করতে toViewingAngle: মেথডটি ব্যবহার করুন।

সুইফট

mapView.animate(toViewingAngle: 45)
      

উদ্দেশ্য-সি

[mapView animateToViewingAngle:45];
      

লক্ষ্য (অবস্থান) নির্ধারণ করুন

অবস্থানটি মানচিত্রের কেন্দ্র নির্ধারণ করে। অবস্থানগুলি অক্ষাংশ এবং দ্রাঘিমাংশ দ্বারা নির্দিষ্ট করা হয় এবং CLLocationCoordinate2DMake দিয়ে তৈরি একটি CLLocationCoordinate2D দ্বারা প্রোগ্রামগতভাবে উপস্থাপন করা হয়।

অবস্থান পরিবর্তন করতে GMSCameraPosition ব্যবহার করুন। এই উদাহরণে, ম্যাপটি নতুন অবস্থানে স্ন্যাপ করে।

সুইফট

let target = CLLocationCoordinate2D(latitude: -33.868, longitude: 151.208)
mapView.camera = GMSCameraPosition(target: target, zoom: 6)
      

উদ্দেশ্য-সি

CLLocationCoordinate2D target =
    CLLocationCoordinate2DMake(-33.868, 151.208);
mapView.camera = [GMSCameraPosition cameraWithTarget:target zoom:6];
      

পরিবর্তনটি অ্যানিমেট করতে এবং ম্যাপটিকে নতুন অবস্থানে প্যান করতে, আপনি camera প্রপার্টি সেট করার পরিবর্তে animateToCameraPosition: মেথডটি ব্যবহার করতে পারেন। অথবা, GMSMapView তে animateToLocation: মেথডটি ব্যবহার করুন।

সুইফট

mapView.animate(toLocation: CLLocationCoordinate2D(latitude: -33.868, longitude: 151.208))
      

উদ্দেশ্য-সি

[mapView animateToLocation:CLLocationCoordinate2DMake(-33.868, 151.208)];
      

ক্যামেরা সরানোর জন্য আপনি একটি GMSCameraUpdate অবজেক্টও তৈরি করতে পারেন। X এবং Y দিকে ক্যামেরাটি কত পয়েন্ট স্ক্রল করবেন তা নির্দিষ্ট করতে এর বিল্ট-ইন মেথড, scrollByX:Y: ব্যবহার করুন। এই উদাহরণে, আপনি ক্যামেরাটি ২০০ পয়েন্ট ডানে এবং ১০০ পয়েন্ট নিচে স্ক্রল করছেন:

সুইফট

// Move the camera 200 points to the right, and 100 points downwards
let downwards = GMSCameraUpdate.scrollBy(x: 200, y: 100)
mapView.animate(with: downwards)
      

উদ্দেশ্য-সি

// Move the camera 200 points to the right, and 100 points downwards
GMSCameraUpdate *downwards = [GMSCameraUpdate scrollByX:200.0 Y:100.0];
[mapView animateWithCameraUpdate:downwards];
      

বিয়ারিং (অভিমুখ) নির্ধারণ করুন

বেয়ারিং হলো মানচিত্রের উপরের প্রান্ত বরাবর দিকনির্দেশ, যা প্রকৃত উত্তর থেকে ডিগ্রিতে পরিমাপ করা হয়। উদাহরণস্বরূপ, ৯০ ডিগ্রি বেয়ারিংয়ের ফলে মানচিত্রের উপরের প্রান্তটি ঠিক পূর্ব দিকে নির্দেশ করে।

GMSCameraPosition বা GMSCameraUpdate অথবা GMSMapView এর animateToBearing: মেথড ব্যবহার করে প্রোগ্রাম্যাটিকভাবে বেয়ারিং সেট করুন।

সুইফট

mapView.animate(toBearing: 0)
      

উদ্দেশ্য-সি

[mapView animateToBearing:0];
      

হেলান (দেখার কোণ) সেট করুন

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

দেখার কোণ ০ (সরাসরি মানচিত্রের দিকে তাকানো) থেকে শুরু করে জুম-স্তরের উপর নির্ভরশীল একটি সর্বোচ্চ সীমা পর্যন্ত হতে পারে। জুম স্তর ১৬ বা তার বেশি হলে, সর্বোচ্চ কোণ হলো ৬৫ ডিগ্রি। জুম স্তর ১০ বা তার কম হলে, সর্বোচ্চ কোণ হলো ৩০ ডিগ্রি।

GMSCameraPosition বা GMSCameraUpdate ব্যবহার করে অথবা GMSMapView এর animateToViewingAngle: মেথডের মাধ্যমে প্রোগ্রাম্যাটিকভাবে দেখার কোণ সেট করুন।

সুইফট

mapView.animate(toViewingAngle: 45)
      

উদ্দেশ্য-সি

[mapView animateToViewingAngle:45];
      

জুম সেট করুন

ক্যামেরার জুম লেভেল মানচিত্রের স্কেল নির্ধারণ করে। বেশি জুম লেভেলে আপনি স্ক্রিনে আরও বিস্তারিত দেখতে পারেন, আর কম জুম লেভেলে আপনি পৃথিবীর আরও বেশি অংশ দেখতে পারেন।

GMSCameraPosition বা GMSCameraUpdate অথবা GMSMapView এর animateToZoom: মেথড ব্যবহার করে প্রোগ্রাম্যাটিকভাবে জুম সেট করুন।

সুইফট

mapView.animate(toZoom: 12)
      

উদ্দেশ্য-সি

[mapView animateToZoom:12];
      

নিম্নলিখিত উদাহরণটি বর্তমান লেভেল থেকে এক লেভেল জুম ইন করার অ্যানিমেশন তৈরি করতে zoomIn: মেথড ব্যবহার করে একটি GMSCameraUpdate অবজেক্ট গঠন করে।

সুইফট

// Zoom in one zoom level
let zoomCamera = GMSCameraUpdate.zoomIn()
mapView.animate(with: zoomCamera)
      

উদ্দেশ্য-সি

// Zoom in one zoom level
GMSCameraUpdate *zoomCamera = [GMSCameraUpdate zoomIn];
[mapView animateWithCameraUpdate:zoomCamera];
      

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

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

  1. স্ক্রিনে দৃশ্যমান করতে চান এমন GMSCoordinateBounds গণনা করুন।
  2. একটি নতুন GMSCameraPosition রিটার্ন করতে GMSMapView এর cameraForBounds:insets: মেথডটি ব্যবহার করুন।

এই সীমানাগুলো এমনভাবে নির্ধারণ করুন যাতে প্রদত্ত GMSCoordinateBounds বর্তমান ম্যাপের আকারের মধ্যে সম্পূর্ণরূপে আঁটে। উল্লেখ্য যে, এই পদ্ধতিটি ম্যাপের টিল্ট এবং বেয়ারিং ০-তে সেট করে।

নিম্নলিখিত উদাহরণটিতে দেখানো হয়েছে কীভাবে ক্যামেরা পরিবর্তন করতে হয়, যাতে ভ্যাঙ্কুভার এবং ক্যালগারি উভয় শহরই একই দৃশ্যে দেখা যায়।

সুইফট

let vancouver = CLLocationCoordinate2D(latitude: 49.26, longitude: -123.11)
let calgary = CLLocationCoordinate2D(latitude: 51.05,longitude: -114.05)
let bounds = GMSCoordinateBounds(coordinate: vancouver, coordinate: calgary)
let camera = mapView.camera(for: bounds, insets: UIEdgeInsets())!
mapView.camera = camera
      

উদ্দেশ্য-সি

CLLocationCoordinate2D vancouver = CLLocationCoordinate2DMake(49.26, -123.11);
CLLocationCoordinate2D calgary = CLLocationCoordinate2DMake(51.05, -114.05);
GMSCoordinateBounds *bounds =
    [[GMSCoordinateBounds alloc] initWithCoordinate:vancouver coordinate:calgary];
GMSCameraPosition *camera = [mapView cameraForBounds:bounds insets:UIEdgeInsetsZero];
mapView.camera = camera;
      

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

এই সিনারিওগুলো ম্যাপের সীমানা নির্ধারণ করে, কিন্তু ব্যবহারকারী তখন এই সীমানার বাইরে স্ক্রল বা প্যান করতে পারেন। এর পরিবর্তে, আপনি ম্যাপের ফোকাল পয়েন্টের (ক্যামেরা টার্গেট) স্থানাঙ্ক কেন্দ্রের সীমানা সীমাবদ্ধ করতে চাইতে পারেন, যাতে ব্যবহারকারীরা কেবল এই সীমানার মধ্যেই স্ক্রল এবং প্যান করতে পারেন।

উদাহরণস্বরূপ, কোনো শপিং সেন্টার বা বিমানবন্দরের রিটেইল অ্যাপ মানচিত্রটিকে নির্দিষ্ট সীমার মধ্যে সীমাবদ্ধ রাখতে চাইতে পারে, যাতে ব্যবহারকারীরা সেই সীমার মধ্যেই স্ক্রল ও প্যান করতে পারে।

প্যানিংকে নির্দিষ্ট সীমার মধ্যে সীমাবদ্ধ রাখতে, GMSMapView এর cameraTargetBounds প্রপার্টিকে একটি GMSCoordinateBounds অবজেক্টে সেট করুন যা প্রয়োজনীয় সীমা নির্ধারণ করে। পরবর্তীতে এই সীমাবদ্ধতা অপসারণ করতে, cameraTargetBounds nil-এ সেট করুন।

সুইফট

mapView.cameraTargetBounds = bounds
      

উদ্দেশ্য-সি

mapView.cameraTargetBounds = bounds;
      

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

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

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

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

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

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

সর্বনিম্ন বা সর্বোচ্চ জুম সেট করুন

গ্লোবাল কনস্ট্যান্ট kGMSMinZoomLevel এবং kGMSMaxZoomLevel সর্বনিম্ন বা সর্বোচ্চ জুমের মান নির্ধারণ করে। ডিফল্টরূপে, GMSMapView এর minZoom এবং maxZoom প্রপার্টিগুলো এই কনস্ট্যান্টগুলোতে সেট করা থাকে।

ম্যাপের জন্য উপলব্ধ জুম লেভেলের পরিসর সীমিত করতে, একটি সর্বনিম্ন এবং সর্বোচ্চ জুম লেভেল নির্ধারণ করুন। নিম্নলিখিত কোডটি জুম লেভেলকে ১০ থেকে ১৫-এর মধ্যে সীমাবদ্ধ করে।

সুইফট

let camera = GMSCameraPosition(
  latitude: 41.887,
  longitude: -87.622,
  zoom: 12
)
let mapView = GMSMapView(frame: .zero, camera: camera)
mapView.setMinZoom(10, maxZoom: 15)
      

উদ্দেশ্য-সি

GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:41.887
                                                       longitude:-87.622
                                                             zoom:12];
GMSMapView *mapView = [GMSMapView mapWithFrame:CGRectZero
                                        camera:camera];
[mapView setMinZoom:10 maxZoom:15];
      

আপনাকে অবশ্যই setMinZoom:maxZoom: মেথড ব্যবহার করে জুম রেঞ্জ সেট করতে হবে; তবে, আপনি minZoom এবং maxZoom প্রপার্টি ব্যবহার করে বর্তমান মানগুলো জানতে পারেন। শুধুমাত্র একটি মান সীমাবদ্ধ করার ক্ষেত্রে এই পদ্ধতিটি সহায়ক। নিচের কোডটি শুধুমাত্র সর্বনিম্ন জুম লেভেল পরিবর্তন করে।

সুইফট

mapView.setMinZoom(12, maxZoom: mapView.maxZoom)
      

উদ্দেশ্য-সি

[mapView setMinZoom:12 maxZoom:mapView.maxZoom];
      

সর্বনিম্ন ও সর্বোচ্চ জুম আপডেট করার পর যদি ক্যামেরার জুম লেভেল নতুন সীমার বাইরের কোনো মানে সেট করা হয়, তাহলে বর্তমান জুম স্বয়ংক্রিয়ভাবে নিকটতম বৈধ মানটি দেখানোর জন্য আপডেট হয়ে যায়। উদাহরণস্বরূপ, নিচের কোডে, মূল জুম ৪ হিসাবে সংজ্ঞায়িত করা হয়েছে। পরবর্তীতে যখন জুমের পরিসর ১০-১৫ এ সেট করা হয়, তখন বর্তমান জুম ১০ এ আপডেট হয়ে যায়।

সুইফট

// Sets the zoom level to 4.
let camera2 = GMSCameraPosition(
  latitude: 41.887,
  longitude: -87.622,
  zoom: 4
)
let mapView2 = GMSMapView(frame: .zero, camera: camera)

// The current zoom, 4, is outside of the range. The zoom will change to 10.
mapView.setMinZoom(10, maxZoom: 15)
      

উদ্দেশ্য-সি

// Sets the zoom level to 4.
GMSCameraPosition *camera2 = [GMSCameraPosition cameraWithLatitude:41.887
                                                         longitude:-87.622
                                                              zoom:4];
GMSMapView *mapView2 = [GMSMapView mapWithFrame:CGRectZero
                                         camera:camera];
// The current zoom, 4, is outside of the range. The zoom will change to 10.
[mapView setMinZoom:10 maxZoom:15];