دوربین و نمای

پلتفرم مورد نظر را انتخاب کنید: اندروید، iOS، جاوا اسکریپت

با استفاده از Maps SDK برای iOS، می‌توانید با تغییر دوربین نقشه، زاویه دید کاربر را نسبت به نقشه تغییر دهید.

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

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

نمای نقشه

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

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

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

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

هدف (مکان)

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

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

یاتاقان (جهت گیری)

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

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

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

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

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

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

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

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

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

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

بزرگنمایی

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

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

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

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

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

موقعیت اولیه دوربین را با استفاده از شیء 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];

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

سویفت

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

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

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

استفاده از GMSCameraPosition

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

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

سویفت

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

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

روش دیگر، ساخت یک شیء GMSCameraUpdate با متد zoomIn: است. سپس با ارسال شیء 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];
      

در عوض، از متد moveCamera: در GMSMapView برای قرار دادن دوربین در موقعیت جدید استفاده کنید.

در مثال بعدی، از 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];
      

هدف (مکان) را تعیین کنید

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

برای تغییر مکان از 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: استفاده کنید. یا از متد animateToLocation: در GMSMapView استفاده کنید.

سویفت

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

هدف-سی

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

همچنین می‌توانید یک شیء GMSCameraUpdate برای حرکت دوربین ایجاد کنید. از متد داخلی آن، scrollByX:Y: برای مشخص کردن تعداد نقاط برای پیمایش دوربین در جهت‌های X و 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 یا با متد animateToBearing: از GMSMapView تنظیم کنید.

سویفت

mapView.animate(toBearing: 0)
      

هدف-سی

[mapView animateToBearing:0];
      

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

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

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

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

سویفت

mapView.animate(toViewingAngle: 45)
      

هدف-سی

[mapView animateToViewingAngle:45];
      

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

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

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

سویفت

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

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

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

سویفت

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 تنظیم کنید.

سویفت

mapView.cameraTargetBounds = bounds
      

هدف-سی

mapView.cameraTargetBounds = bounds;
      

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

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

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

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

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

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

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

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

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

سویفت

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