دوربین و نما

پلاتفرم را انتخاب کنید: Android iOS JavaScript

با «کیت توسعه نرم‌افزار Google Maps برای iOS»، می‌توانید با تغییر دادن دوربین نقشه، نقطه دید کاربر از نقشه را تغییر دهید.

با «کیت توسعه نرم‌افزار Google Maps برای iOS»، کاربران شما می‌توانند نقشه‌هایتان را کج کنند و بچرخانند تا آن‌ها را در جهتی که برای بافت آن‌ها مفید است تنظیم کنند. در هر سطح بزرگ‌نمایی، کاربران می‌توانند نقشه را با تأخیر بسیار کمی حرکت دهند یا چشم‌انداز آن را تغییر دهند.

تغییرات دوربین نشانگرها، چندخطی‌ها، یا دیگر گرافیک‌هایی را که اضافه کرده‌اید تغییر نمی‌دهد، هرچند ممکن است بخواهید این موارد اضافه‌شده را تغییر دهید تا با نمای جدید بهتر مطابقت داشته باشند.

نمای نقشه

«کیت توسعه نرم‌افزار Maps برای iOS» از تصویر مرکاتور برای نمایش سطح جهان (کره) در صفحه دستگاهتان (سطح صاف) استفاده می‌کند.

موقعیت دوربین

نمای نقشه به‌عنوان دوربینی مدل‌سازی شده است که به صفحه‌ای تخت نگاه می‌کند. موقعیت دوربین (و درنتیجه رندر کردن نقشه) با ویژگی‌های زیر مشخص می‌شود: هدف (مکان عرض جغرافیایی/طول جغرافیایی)، زاویه، شیب، و بزرگ‌نمایی.

نمودار ویژگی‌های دوربین

هدف (مکان)

نشان‌گاه دوربین مکان مرکز نقشه است که به‌صورت مختصات طول و عرض جغرافیایی مشخص می‌شود.

عرض جغرافیایی می‌تواند بین ۸۵- و ۸۵ درجه باشد. مقادیر بالاتر یا پایین‌تر از این محدوده به نزدیک‌ترین مقدار در این محدوده محدود خواهند شد. برای مثال، اگر عرض جغرافیایی را ۱۰۰ مشخص کنید، مقدار آن روی ۸۵ تنظیم می‌شود. طول جغرافیایی بین ۱۸۰- و ۱۸۰ درجه است. مقادیر بالاتر یا پایین‌تر از این محدوده به‌گونه‌ای پیچیده می‌شوند که در محدوده (۱۸۰-، ۱۸۰) قرار گیرند. برای مثال، ۴۸۰، ۸۴۰، و ۱۲۰۰ همگی به ۱۲۰ درجه تبدیل می‌شوند.

جهت (جهت‌یابی)

جهت دوربین، جهت قطب‌نما را مشخص می‌کند که برحسب درجه از شمال واقعی اندازه‌گیری می‌شود و با لبه بالایی نقشه مطابقت دارد. اگر خطی عمودی از مرکز نقشه به لبه بالایی نقشه بکشید، جهت با عنوان دوربین (اندازه‌گیری‌شده به درجه) نسبت به شمال واقعی مطابقت دارد.

جهت ۰ یعنی بالای نقشه به‌سمت شمال واقعی است. مقدار جهت ۹۰ یعنی بالای نقشه به‌سمت شرق است (۹۰ درجه روی قطب‌نما). مقدار ۱۸۰ یعنی بالای نقشه به‌سمت جنوب است.

Maps API به شما امکان می‌دهد جهت نقشه را تغییر دهید. برای مثال، کسی که رانندگی می‌کند اغلب نقشه راه را می‌چرخاند تا آن را با جهت سفرش هم‌راستا کند، درحالی‌که کوهنوردان بااستفاده از نقشه و قطب‌نما معمولاً نقشه را طوری جهت‌یابی می‌کنند که خط عمودی به سمت شمال باشد.

شیب (زاویه دید)

شیب موقعیت دوربین را روی قوسی مستقیماً بالای موقعیت مرکز نقشه تعریف می‌کند که برحسب درجه از نظیر (جهتی که مستقیماً زیر دوربین را نشان می‌دهد) اندازه‌گیری می‌شود. مقدار ۰ مربوط به دوربینی است که مستقیماً به‌سمت پایین گرفته شده است. مقادیر بزرگ‌تر از ۰ مربوط به دوربینی است که به‌اندازه تعداد درجه مشخص‌شده به‌سمت افق زاویه دارد. وقتی زاویه دید را تغییر می‌دهید، نقشه به‌صورت پرسپکتیو نمایش داده می‌شود و عارضه‌های دورتر کوچک‌تر و عارضه‌های نزدیک‌تر بزرگ‌تر نشان داده می‌شوند. تصویرهای زیر این موضوع را نشان می‌دهد.

در تصاویر زیر، زاویه دید ۰ درجه است. تصویر اول طرح‌واره‌ای از این موضوع را نشان می‌دهد؛ موقعیت ۱ موقعیت دوربین است و موقعیت ۲ موقعیت فعلی نقشه است. نقشه حاصل در زیر آن نشان داده می‌شود.

نماگرفت نقشه‌ای با دوربینی که در زاویه دید ۰ درجه و سطح بزرگ‌نمایی ۱۸ قرار دارد.
نقشه با زاویه دید پیش‌فرض دوربین نمایش داده می‌شود.
نموداری که موقعیت پیش‌فرض دوربین را مستقیماً روی موقعیت نقشه با زاویه ۰ درجه نشان می‌دهد.
زاویه دید پیش‌فرض دوربین.

در تصاویر زیر، زاویه دید ۴۵ درجه است. توجه کنید که دوربین تا نیمه در امتداد قوسی بین بالای سر (۰ درجه) و زمین (۹۰ درجه) حرکت می‌کند تا به موقعیت ۳ برسد. دوربین همچنان به‌سمت نقطه مرکزی نقشه است، اما منطقه‌ای که با خط در موقعیت ۴ نشان داده شده است اکنون قابل‌مشاهده است.

نماگرفتی از نقشه با دوربینی که در زاویه دید ۴۵ درجه و سطح بزرگ‌نمایی ۱۸ قرار دارد.
نقشه با زاویه دید ۴۵ درجه نمایش داده می‌شود.
نموداری که نشان می‌دهد زاویه دید دوربین روی ۴۵ درجه تنظیم شده است، درحالی‌که سطح بزرگ‌نمایی هنوز روی ۱۸ تنظیم شده است.
زاویه دید دوربین ۴۵ درجه است.

نقشه در این نماگرفت همچنان روی همان نقطه نقشه اصلی متمرکز است، اما ویژگی‌های بیشتری در بالای نقشه ظاهر شده است. با افزایش زاویه به بیش از ۴۵ درجه، عوارض بین دوربین و موقعیت نقشه به‌طور متناسب بزرگ‌تر ظاهر می‌شوند، درحالی‌که عوارض فراتر از موقعیت نقشه به‌طور متناسب کوچک‌تر ظاهر می‌شوند و جلوه‌ای سه‌بعدی ایجاد می‌کنند.

بزرگ‌نمایی

سطح بزرگ‌نمایی دوربین مقیاس نقشه را تعیین می‌کند. در سطوح بزرگ‌نمایی بیشتر، جزئیات بیشتری در صفحه دیده می‌شود، درحالی‌که در سطوح بزرگ‌نمایی کمتر، بخش بیشتری از جهان در صفحه دیده می‌شود. در سطح بزرگ‌نمایی ۰، مقیاس نقشه به‌گونه‌ای است که کل جهان تقریباً ۲۵۶ نقطه عرض دارد.

افزایش سطح بزرگ‌نمایی به‌اندازه ۱، عرض جهان را در صفحه‌نمایش دوبرابر می‌کند. بنابراین در سطح بزرگ‌نمایی N، عرض جهان تقریباً 256 * 2N نقطه است. برای مثال، در سطح بزرگ‌نمایی ۲، کل جهان تقریباً ۱۰۲۴ نقطه عرض دارد.

سطح بزرگ‌نمایی لزوماً نباید عدد صحیح باشد. محدوده سطوح بزرگ‌نمایی مجاز در نقشه به عوامل متعددی ازجمله هدف، نوع نقشه، و اندازه صفحه‌نمایش بستگی دارد. هر عددی خارج از این محدوده به نزدیک‌ترین مقدار معتبر بعدی تبدیل می‌شود که می‌تواند حداقل سطح بزرگ‌نمایی یا حداکثر سطح بزرگ‌نمایی باشد. فهرست زیر سطح تقریبی جزئیاتی را نشان می‌دهد که می‌توانید انتظار داشته باشید در هر سطح بزرگ‌نمایی ببینید:

  • ‫۱: جهان
  • ۵: خشکی/قاره
  • ‫۱۰: شهر
  • ‫۱۵: خیابان‌ها
  • ‫۲۰: ساختمان‌ها
تصاویر زیر ظاهر بصری سطوح بزرگ‌نمایی مختلف را نشان می‌دهد:
نماگرفت نقشه در سطح بزرگ‌نمایی ۵
نقشه‌ای در سطح بزرگ‌نمایی ۵.
نماگرفت از نقشه در سطح بزرگ‌نمایی ۱۵
نقشه‌ای با سطح بزرگ‌نمایی ۱۵.
نماگرفت نقشه در سطح بزرگ‌نمایی ۲۰
نقشه‌ای با سطح بزرگ‌نمایی ۲۰.

تنظیم موقعیت اولیه دوربین

موقعیت اولیه دوربین را بااستفاده از شیء GMSCameraPosition تنظیم کنید که به شما امکان می‌دهد عرض و طول جغرافیایی هدف را به‌همراه زاویه، کج کردن، و بزرگ‌نمایی تنظیم کنید.

برای تنظیم موقعیت اولیه دوربین، یک شیء GMSMapViewOptions ایجاد کنید و ویژگی camera را روی GMSCameraPosition تنظیم کنید. سپس گزینه‌هایتان را به سازنده راحتی GMSMapView منتقل کنید.

Swift

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];

همچنین می‌توانید شیء GMSMapView را بااستفاده از روش پیش‌فرض UIView init ایجاد کنید. دراین‌صورت، موقعیت دوربین از مکان پیش‌فرض شروع می‌شود و شما آن را پس‌از ایجاد تغییر می‌دهید.

Swift

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 به شما امکان می‌دهد هدف، جهت، شیب، و بزرگ‌نمایی را تغییر دهید و همچنین شامل روش‌های راحتی بیشتری برای پشتیبانی از پیمایش، بزرگ‌نمایی پیشرفته، متمرکز کردن دوربین در مرزهای ازپیش‌تعریف‌شده، و غیره است.

وقتی دوربین را حرکت می‌دهید، می‌توانید انتخاب کنید که دوربین به موقعیت جدید «بچسبد»، یعنی پویانمایی وجود نداشته باشد، یا حرکت پویانمایی شود. برای مثال، اگر تغییر مکان هدف دوربین را پویانمایی کنید، پویانمایی از مکان قبلی به مکان جدید حرکت افقی می‌کند.

پویانمایی بین ویژگی‌های دوربین فعلی و ویژگی‌های دوربین جدید درون‌یابی می‌کند. می‌توانید مدت پویانمایی را بااستفاده از Core Animation کنترل کنید.

استفاده از GMSCameraPosition

برای تغییر دادن دوربین با GMSCameraPosition، شیء جدیدی ایجاد می‌کنید یا شیء موجودی را کپی می‌کنید و سپس آن را روی شیء GMSMapView تنظیم می‌کنید. از شیء GMSCameraPosition برای انتقال سریع دوربین به مکان جدید با یا بدون پویانمایی استفاده کنید.

از شیء GMSCameraPosition برای پیکربندی ویژگی‌های دوربین مانند عرض جغرافیایی، طول جغرافیایی، بزرگ‌نمایی، جهت، و زاویه دید استفاده کنید. سپس از آن شیء برای تنظیم خصوصیت camera مربوط به GMSMapView استفاده می‌کنید.

Swift

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 به شما امکان می‌دهد موقعیت دوربین را به‌روز کنید و انتخاب کنید که به آن موقعیت جدید بچسبد یا پویانمایی شود. مزیت GMSCameraUpdate راحتی آن است. می‌توانید از GMSCameraPosition برای انجام همان کارهای GMSCameraUpdate استفاده کنید، اما GMSCameraUpdate روش‌های کمکی بیشتری ارائه می‌دهد تا دستکاری دوربین آسان‌تر شود.

برای مثال، برای استفاده از GMSCameraPosition برای افزایش سطح بزرگ‌نمایی فعلی، باید ابتدا سطح بزرگ‌نمایی فعلی را تعیین کنید، سپس یک شیء GMSCameraPosition ایجاد کنید که در آن بزرگ‌نمایی را روی مقداری یک واحد بیشتر از بزرگ‌نمایی فعلی تنظیم کنید.

یا شیء GMSCameraUpdate را با روش zoomIn: بسازید. سپس دوربین را با ارسال شیء GMSCameraUpdate به روش GMSMapView animateWithCameraUpdate: به‌روز کنید.

Swift

// 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 برای پویانمایی حرکت دوربین برای قرار دادن ونکوور در مرکز استفاده می‌کنید.

Swift

// 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: برای پویانمایی تغییر در شیب دوربین استفاده کنید.

Swift

mapView.animate(toViewingAngle: 45)
      

آبجکتیو-سی

[mapView animateToViewingAngle:45];
      

تنظیم هدف (مکان)

مکان مرکز نقشه را تعیین می‌کند. مکان‌ها با طول و عرض جغرافیایی مشخص می‌شوند و به‌صورت برنامه‌نویسی‌شده با CLLocationCoordinate2D که با CLLocationCoordinate2DMake ایجاد شده است نشان داده می‌شوند.

برای تغییر مکان، از GMSCameraPosition استفاده کنید. در این مثال، نقشه به مکان جدید می‌پرد.

Swift

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: استفاده کنید. یا، از روش animateToLocation: در GMSMapView استفاده کنید.

Swift

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

آبجکتیو-سی

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

همچنین می‌توانید شیء GMSCameraUpdate ایجاد کنید تا دوربین را حرکت دهید. از روش داخلی آن، scrollByX:Y:، برای مشخص کردن تعداد نقاطی که دوربین باید در جهت‌های X و Y پیمایش کند استفاده کنید. در این مثال، دوربین را ۲۰۰ نقطه به راست و ۱۰۰ نقطه به پایین پیمایش می‌کنید:

Swift

// 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 یا با روش animateToBearing: از GMSMapView تنظیم کنید.

Swift

mapView.animate(toBearing: 0)
      

آبجکتیو-سی

[mapView animateToBearing:0];
      

تنظیم شیب (زاویه دید)

زاویه دید موقعیت دوربین روی یک قوس بین موقعیت مستقیم بالای مرکز نقشه و سطح زمین است که برحسب درجه از سمت‌القدم (جهتی که مستقیماً زیر دوربین را نشان می‌دهد) اندازه‌گیری می‌شود. وقتی زاویه دید را تغییر می‌دهید، نقشه به‌صورت پرسپکتیو نشان داده می‌شود، به‌طوری‌که عوارض بین دوربین و موقعیت نقشه به‌طور نسبی بزرگ‌تر و عوارض فراتر از موقعیت نقشه به‌طور نسبی کوچک‌تر نشان داده می‌شوند و جلوه‌ای سه‌بعدی ایجاد می‌کنند.

زاویه دید می‌تواند بین ۰ (اشاره مستقیم به پایین نقشه) و حداکثر وابسته به سطح بزرگ‌نمایی باشد. برای سطح بزرگ‌نمایی ۱۶ یا بالاتر، حداکثر زاویه ۶۵ درجه است. برای سطح بزرگ‌نمایی ۱۰ یا کمتر، حداکثر زاویه ۳۰ درجه است.

زاویه دید را به‌صورت برنامه‌نویسی بااستفاده از GMSCameraPosition یا GMSCameraUpdate یا با روش animateToViewingAngle: مربوط به GMSMapView تنظیم کنید.

Swift

mapView.animate(toViewingAngle: 45)
      

آبجکتیو-سی

[mapView animateToViewingAngle:45];
      

تنظیم بزرگ‌نمایی

سطح بزرگ‌نمایی دوربین مقیاس نقشه را تعیین می‌کند. در سطوح بزرگ‌نمایی بیشتر، می‌توانید جزئیات بیشتری را در صفحه‌نمایش ببینید، درحالی‌که در سطوح بزرگ‌نمایی کمتر، می‌توانید بخش بیشتری از جهان را ببینید.

زوم را به‌صورت برنامه‌نویسی‌شده با GMSCameraPosition یا GMSCameraUpdate یا با روش animateToZoom: از GMSMapView تنظیم کنید.

Swift

mapView.animate(toZoom: 12)
      

آبجکتیو-سی

[mapView animateToZoom:12];
      

مثال زیر از روش zoomIn: برای ساختن شیء GMSCameraUpdate استفاده می‌کند تا بزرگ‌نمایی را به‌اندازه یک سطح از سطح فعلی پویانمایی کند.

Swift

// 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. از روش cameraForBounds:insets: مربوط به GMSMapView برای برگرداندن GMSCameraPosition جدید استفاده کنید.

این مرزها را طوری تنظیم کنید که GMSCoordinateBounds داده‌شده کاملاً در اندازه نقشه فعلی جا شود. توجه داشته باشید که این روش شیب و جهت نقشه را روی ۰ تنظیم می‌کند.

مثال زیر نشان می‌دهد که چگونه دوربین را تغییر دهید تا شهرهای ونکوور و کلگری هر دو در یک نما ظاهر شوند.

Swift

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;
      

محدود کردن حرکت افقی کاربر به ناحیه‌ای مشخص

این سناریوها مرزهای نقشه را تعیین می‌کنند اما کاربر می‌تواند به خارج از این مرزها پیمایش یا حرکت افقی کند. درعوض، شاید بخواهید مرزهای مرکز مختصات نقطه کانونی نقشه (هدف دوربین) را محدود کنید تا کاربران فقط بتوانند در این مرزها پیمایش و حرکت کنند.

برای مثال، یک برنامه خرده‌فروشی برای مرکز خرید یا فرودگاه ممکن است بخواهد نقشه را به مرزهای خاصی محدود کند، و به کاربران اجازه دهد در آن مرزها پیمایش و جابه‌جا شوند.

برای محدود کردن حرکت افقی به مرزهای خاص، ویژگی cameraTargetBounds مربوط به GMSMapView را روی شیء GMSCoordinateBounds که مرزهای موردنیاز را تعریف می‌کند تنظیم کنید. برای برداشتن محدودیت در آینده، cameraTargetBounds را روی nil تنظیم کنید.

Swift

mapView.cameraTargetBounds = bounds
      

آبجکتیو-سی

mapView.cameraTargetBounds = bounds;
      

نمودار زیر سناریویی را نشان می‌دهد که در آن نشان‌گاه دوربین به منطقه‌ای محدود شده است که کمی بزرگ‌تر از نمای هدف است. کاربر می‌تواند پیمایش و حرکت افقی کند، به‌شرطی که هدف دوربین در محدوده مرز باقی بماند. علامت به‌علاوه نشان‌دهنده نشان‌گاه دوربین است:

نموداری که مرزهای دوربین را نشان می‌دهد که بزرگ‌تر از
      نمای دید است.

نقشه همیشه ناحیه نمایش را پر می‌کند، حتی اگر این کار باعث شود ناحیه نمایش مناطقی را نشان دهد که خارج از مرزهای تعریف‌شده هستند. برای مثال، اگر نشان‌گاه دوربین را در گوشه‌ای از ناحیه محدودشده قرار دهید، ناحیه فراتر از گوشه در نمای دید قابل‌مشاهده است اما کاربران نمی‌توانند بیشتر از آن در آن ناحیه پیمایش کنند. نمودار زیر این سناریو را نشان می‌دهد. علامت ضربدر نشان‌گاه دوربین را نشان می‌دهد:

نموداری که نشان‌گاه دوربین را در گوشه پایین سمت راست مرزهای دوربین نشان می‌دهد.

در نمودار زیر، نشان‌گاه دوربین مرزهای بسیار محدودی دارد و به کاربر فرصت بسیار کمی برای پیمایش یا حرکت دادن نقشه می‌دهد. علامت ضربدر نشان‌دهنده نشان‌گاه دوربین است:

نموداری که مرزهای دوربین را نشان می‌دهد که کوچک‌تر از
      نمای دید است.

تنظیم حداقل یا حداکثر بزرگ‌نمایی

ثابت‌های جهانی kGMSMinZoomLevel و kGMSMaxZoomLevel حداقل یا حداکثر مقادیر بزرگ‌نمایی را تعریف می‌کنند. به‌طور پیش‌فرض، ویژگی‌های minZoom و maxZoom GMSMapView روی این ثابت‌ها تنظیم شده‌اند.

برای محدود کردن محدوده سطوح بزرگ‌نمایی دردسترس برای نقشه، حداقل و حداکثر سطح بزرگ‌نمایی را تنظیم کنید. کد زیر سطح بزرگ‌نمایی را به بین ۱۰ و ۱۵ محدود می‌کند.

Swift

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

آبجکتیو-سی

GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:41.887
                                                       longitude:-87.622
                                                             zoom:12];
GMSMapViewOptions *options = [[GMSMapViewOptions alloc] init];
options.camera = camera;
GMSMapView *mapView = [[GMSMapView alloc] initWithOptions:options];
[mapView setMinZoom:10 maxZoom:15];
      

باید محدوده بزرگ‌نمایی را با روش setMinZoom:maxZoom: تنظیم کنید؛ اما می‌توانید مقادیر فعلی را بااستفاده از ویژگی‌های minZoom و maxZoom بخوانید. این رویکرد زمانی مفید است که فقط یکی از مقادیر محدود شود. کد زیر فقط حداقل سطح بزرگ‌نمایی را تغییر می‌دهد.

Swift

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

آبجکتیو-سی

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

اگر پس‌از به‌روزرسانی حداقل و حداکثر بزرگ‌نمایی، سطح بزرگ‌نمایی دوربین روی مقداری خارج از محدوده جدید تنظیم شود، بزرگ‌نمایی فعلی به‌طور خودکار به‌روز می‌شود تا نزدیک‌ترین مقدار معتبر را نمایش دهد. برای مثال، در کد زیر، بزرگ‌نمایی اصلی ۴ تعریف شده است. وقتی محدوده بزرگ‌نمایی بعداً روی ۱۰ تا ۱۵ تنظیم شود، بزرگ‌نمایی فعلی به ۱۰ به‌روز می‌شود.

Swift

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

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

آبجکتیو-سی

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