دوربین و نمای

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

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

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

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

نمای نقشه

Maps SDK برای iOS از پیش‌بینی Mercator برای نمایش سطح جهان (یک کره) در صفحه دستگاه شما (یک صفحه تخت) استفاده می‌کند.

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

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

نمودار مشخصات دوربین

هدف (مکان)

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

عرض جغرافیایی می تواند بین 85- تا 85 درجه باشد. مقادیر بالاتر یا پایین‌تر از این محدوده به نزدیک‌ترین مقدار در این محدوده گیره می‌شوند. برای مثال، با تعیین عرض جغرافیایی 100، مقدار 85 تنظیم می شود. مقادیر بالاتر یا پایین تر از این محدوده به گونه ای بسته بندی می شوند که در محدوده (-180، 180) قرار می گیرند. به عنوان مثال، 480، 840 و 1200 همه تا 120 درجه پیچیده می شوند.

بلبرینگ (جهت گیری)

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

یاتاقان 0 به این معنی است که بالای نقشه به شمال واقعی اشاره می کند. مقدار باربری 90 به معنای بالای نقاط نقشه به سمت شرق است (90 درجه روی قطب نما). مقدار 180 به معنای بالای نقاط نقشه به سمت جنوب است.

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

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

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

در تصاویر زیر زاویه دید 0 درجه است. تصویر اول شماتیکی از این را نشان می دهد. موقعیت 1 موقعیت دوربین و موقعیت 2 موقعیت فعلی نقشه است. نقشه حاصل در زیر آن نشان داده شده است.

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

در تصاویر زیر زاویه دید 45 درجه است. توجه داشته باشید که دوربین در نیمه راه در امتداد قوس بین مستقیم بالای سر (0 درجه) و زمین (90 درجه) به موقعیت 3 حرکت می کند. دوربین همچنان به نقطه مرکزی نقشه اشاره می کند، اما منطقه ای که با خط در موقعیت 4 نشان داده شده است اکنون قابل مشاهده است.

تصویری از نقشه با دوربینی که در زاویه دید 45 درجه، در سطح زوم 18 قرار گرفته است.
نقشه با زاویه دید 45 درجه نمایش داده می شود.
نموداری که زاویه دید دوربین را روی 45 درجه تنظیم کرده و سطح زوم هنوز روی 18 تنظیم شده است.
زاویه دید دوربین 45 درجه.

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

بزرگنمایی ضربه بزنید؛

سطح زوم دوربین مقیاس نقشه را تعیین می کند. در سطوح بزرگنمایی بزرگتر، جزئیات بیشتری روی صفحه نمایش دیده می شود، در حالی که در سطوح بزرگنمایی کوچکتر، می توان بیشتر جهان را روی صفحه مشاهده کرد. در سطح زوم 0، مقیاس نقشه به گونه ای است که پهنای کل جهان تقریباً 256 نقطه است.

افزایش سطح زوم به میزان 1، عرض جهان روی صفحه را دو برابر می کند. بنابراین در سطح زوم N، عرض جهان تقریباً 256 * 2 N است. به عنوان مثال، در سطح زوم 2، کل جهان تقریباً 1024 نقطه عرض دارد.

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

  • 1: جهان
  • 5: خشکی / قاره
  • 10: شهر
  • 15: خیابان ها
  • 20: ساختمان ها
تصاویر زیر نمای بصری سطوح مختلف زوم را نشان می دهد:
اسکرین شات از نقشه در سطح زوم 5
نقشه در سطح زوم 5.
اسکرین شات از نقشه در سطح زوم 15
نقشه در سطح زوم 15.
اسکرین شات از نقشه در سطح زوم 20
نقشه در سطح زوم 20.

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

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

هدف-C

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)

هدف-C

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
      

هدف-C

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: دوربین را به روز کنید.

سویفت

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

هدف-C

// 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)
      

هدف-C

// 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:
سطح زوم فعلی را 1.0 تغییر دهید، در حالی که سایر ویژگی ها را یکسان نگه دارید.
zoomTo:
سطح بزرگنمایی را به مقدار داده شده تغییر می دهد، در حالی که همه ویژگی های دیگر را یکسان نگه می دارد.
zoomBy:
سطح بزرگنمایی را با مقدار داده شده افزایش می دهد (یا کاهش می دهد، در صورت منفی بودن مقدار).
zoomBy:atPoint:
سطح بزرگنمایی را با مقدار داده شده افزایش می دهد (یا کاهش می دهد، در صورت منفی بودن مقدار)، در حالی که موقعیت نقطه مشخص شده روی صفحه را حفظ می کند.
setTarget:
طول و عرض جغرافیایی دوربین را تغییر می دهد، در حالی که تمام خصوصیات دیگر را حفظ می کند.
setTarget:zoom:
طول جغرافیایی، طول و زوم دوربین را تغییر می دهد، در حالی که تمام خصوصیات دیگر را حفظ می کند.
setCamera:
یک GMSCameraPosition جدید تنظیم می کند.
scrollByX:Y:
طول و عرض جغرافیایی دوربین را تغییر می دهد تا نقشه را بر اساس تعداد نقاط مشخص شده جابجا کند. یک مقدار x مثبت باعث می شود دوربین به سمت راست حرکت کند، به طوری که به نظر می رسد نقشه به سمت چپ حرکت کرده است. یک مقدار مثبت y باعث می شود دوربین به سمت پایین حرکت کند، به طوری که به نظر می رسد نقشه به سمت بالا حرکت کرده است. پیمایش نسبت به بلبرینگ فعلی دوربین است. به عنوان مثال، اگر دوربین دارای یک یاتاقان 90 درجه باشد، شرق "بالا" است.
fitBounds:
دوربین را تغییر می دهد تا محدوده های مشخص شده روی صفحه نمایش را در بیشترین سطح بزرگنمایی در مرکز قرار دهد. یک بالشتک پیش‌فرض را روی مرزهای 64 نقطه اعمال می‌کند.
fitBounds:withPadding:
دوربین را تغییر می دهد تا محدوده های مشخص شده روی صفحه نمایش را در بیشترین سطح بزرگنمایی در مرکز قرار دهد. از این روش برای مشخص کردن لایه یکسان، در نقاط، برای همه طرف‌های جعبه مرزی استفاده کنید.
fitBounds:withEdgeInsets:
دوربین را تغییر می دهد تا محدوده های مشخص شده روی صفحه نمایش را در بیشترین سطح بزرگنمایی در مرکز قرار دهد. با UIEdgeInsets ، شما padding را برای هر طرف جعبه مرزی به طور مستقل مشخص می کنید.

از GMSMapView برای تغییر یک ویژگی استفاده کنید

GMSMapView چندین روش ارائه می دهد که به شما امکان می دهد دوربین را بدون استفاده از شیء GMSCameraPosition یا شیء GMSCameraUpdate حرکت دهید. با این روش‌ها، مانند animateToLocation: یا animateToZoom: می‌توانید تغییری را در یک ویژگی دوربین متحرک کنید.

برای مثال، از روش toViewingAngle: برای متحرک سازی تغییر در شیب دوربین استفاده کنید.

سویفت

mapView.animate(toViewingAngle: 45)
      

هدف-C

[mapView animateToViewingAngle:45];
      

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

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

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

سویفت

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

هدف-C

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))
      

هدف-C

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

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

سویفت

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

هدف-C

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

بلبرینگ تنظیم (جهت گیری)

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

یاتاقان را با برنامه GMSCameraPosition یا GMSCameraUpdate یا با متد animateToBearing: GMSMapView تنظیم کنید.

سویفت

mapView.animate(toBearing: 0)
      

هدف-C

[mapView animateToBearing:0];
      

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

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

زاویه دید می تواند بین 0 (نقطه مستقیم به سمت پایین روی نقشه) و حداکثر وابسته به سطح زوم باشد. برای سطح زوم 16 یا بالاتر، حداکثر زاویه 65 درجه است. برای سطح زوم 10 یا کمتر، حداکثر زاویه 30 درجه است.

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

سویفت

mapView.animate(toViewingAngle: 45)
      

هدف-C

[mapView animateToViewingAngle:45];
      

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

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

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

سویفت

mapView.animate(toZoom: 12)
      

هدف-C

[mapView animateToZoom:12];
      

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

سویفت

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

هدف-C

// 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
      

هدف-C

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

سویفت

mapView.cameraTargetBounds = bounds
      

هدف-C

mapView.cameraTargetBounds = bounds;
      

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

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

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

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

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

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

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

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

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

سویفت

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

هدف-C

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)
      

هدف-C

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

اگر پس از به‌روزرسانی کوچک‌ترین و حداکثر زوم، سطح زوم دوربین روی مقداری خارج از محدوده جدید تنظیم شود، بزرگ‌نمایی فعلی به‌طور خودکار به‌روزرسانی می‌شود تا نزدیک‌ترین مقدار معتبر را نمایش دهد. به عنوان مثال، در کد زیر، بزرگنمایی اصلی به صورت 4 تعریف شده است. وقتی محدوده بزرگنمایی بعداً روی 10-15 تنظیم شود، بزرگنمایی فعلی به 10 به روز می شود.

سویفت

// 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)
      

هدف-C

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

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

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

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

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

نمای نقشه

Maps SDK برای iOS از پیش‌بینی Mercator برای نمایش سطح جهان (یک کره) در صفحه دستگاه شما (یک صفحه تخت) استفاده می‌کند.

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

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

نمودار مشخصات دوربین

هدف (مکان)

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

عرض جغرافیایی می تواند بین 85- تا 85 درجه باشد. مقادیر بالاتر یا پایین‌تر از این محدوده به نزدیک‌ترین مقدار در این محدوده گیره می‌شوند. برای مثال، با تعیین عرض جغرافیایی 100، مقدار 85 تنظیم می شود. مقادیر بالاتر یا پایین تر از این محدوده به گونه ای بسته بندی می شوند که در محدوده (-180، 180) قرار می گیرند. به عنوان مثال، 480، 840 و 1200 همه تا 120 درجه پیچیده می شوند.

بلبرینگ (جهت گیری)

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

یاتاقان 0 به این معنی است که بالای نقشه به شمال واقعی اشاره می کند. مقدار باربری 90 به معنای بالای نقاط نقشه به سمت شرق است (90 درجه روی قطب نما). مقدار 180 به معنای بالای نقاط نقشه به سمت جنوب است.

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

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

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

در تصاویر زیر زاویه دید 0 درجه است. تصویر اول شماتیکی از این را نشان می دهد. موقعیت 1 موقعیت دوربین و موقعیت 2 موقعیت فعلی نقشه است. نقشه حاصل در زیر آن نشان داده شده است.

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

در تصاویر زیر زاویه دید 45 درجه است. توجه داشته باشید که دوربین در نیمه راه در امتداد قوس بین مستقیم بالای سر (0 درجه) و زمین (90 درجه) به موقعیت 3 حرکت می کند. دوربین همچنان به نقطه مرکزی نقشه اشاره می کند، اما منطقه ای که با خط در موقعیت 4 نشان داده شده است اکنون قابل مشاهده است.

تصویری از نقشه با دوربینی که در زاویه دید 45 درجه، در سطح زوم 18 قرار گرفته است.
نقشه با زاویه دید 45 درجه نمایش داده می شود.
نموداری که زاویه دید دوربین را روی 45 درجه تنظیم کرده و سطح زوم هنوز روی 18 تنظیم شده است.
زاویه دید دوربین 45 درجه.

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

بزرگنمایی ضربه بزنید؛

سطح زوم دوربین مقیاس نقشه را تعیین می کند. در سطوح بزرگنمایی بزرگتر، جزئیات بیشتری روی صفحه نمایش دیده می شود، در حالی که در سطوح بزرگنمایی کوچکتر، می توان بیشتر جهان را روی صفحه مشاهده کرد. در سطح زوم 0، مقیاس نقشه به گونه ای است که پهنای کل جهان تقریباً 256 نقطه است.

افزایش سطح زوم به میزان 1، عرض جهان روی صفحه را دو برابر می کند. بنابراین در سطح زوم N، عرض جهان تقریباً 256 * 2 N است. به عنوان مثال، در سطح زوم 2، کل جهان تقریباً 1024 نقطه عرض دارد.

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

  • 1: جهان
  • 5: خشکی / قاره
  • 10: شهر
  • 15: خیابان ها
  • 20: ساختمان ها
تصاویر زیر نمای بصری سطوح مختلف زوم را نشان می دهد:
اسکرین شات از نقشه در سطح زوم 5
نقشه در سطح زوم 5.
اسکرین شات از نقشه در سطح زوم 15
نقشه در سطح زوم 15.
اسکرین شات از نقشه در سطح زوم 20
نقشه در سطح زوم 20.

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

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

هدف-C

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)

هدف-C

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
      

هدف-C

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: دوربین را به روز کنید.

سویفت

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

هدف-C

// 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)
      

هدف-C

// 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:
سطح زوم فعلی را 1.0 تغییر دهید، در حالی که سایر ویژگی ها را یکسان نگه دارید.
zoomTo:
سطح بزرگنمایی را به مقدار داده شده تغییر می دهد، در حالی که همه ویژگی های دیگر را یکسان نگه می دارد.
zoomBy:
سطح بزرگنمایی را با مقدار داده شده افزایش می دهد (یا کاهش می دهد، در صورت منفی بودن مقدار).
zoomBy:atPoint:
سطح بزرگنمایی را با مقدار داده شده افزایش می دهد (یا کاهش می دهد، در صورت منفی بودن مقدار)، در حالی که موقعیت نقطه مشخص شده روی صفحه را حفظ می کند.
setTarget:
طول و عرض جغرافیایی دوربین را تغییر می دهد، در حالی که تمام خصوصیات دیگر را حفظ می کند.
setTarget:zoom:
طول جغرافیایی، طول و زوم دوربین را تغییر می دهد، در حالی که تمام خصوصیات دیگر را حفظ می کند.
setCamera:
یک GMSCameraPosition جدید تنظیم می کند.
scrollByX:Y:
طول و عرض جغرافیایی دوربین را تغییر می دهد تا نقشه را بر اساس تعداد نقاط مشخص شده جابجا کند. یک مقدار x مثبت باعث می شود دوربین به سمت راست حرکت کند، به طوری که به نظر می رسد نقشه به سمت چپ حرکت کرده است. یک مقدار مثبت y باعث می شود دوربین به سمت پایین حرکت کند، به طوری که به نظر می رسد نقشه به سمت بالا حرکت کرده است. پیمایش نسبت به بلبرینگ فعلی دوربین است. به عنوان مثال، اگر دوربین دارای یک یاتاقان 90 درجه باشد، شرق "بالا" است.
fitBounds:
دوربین را تغییر می دهد تا محدوده های مشخص شده روی صفحه نمایش را در بیشترین سطح بزرگنمایی در مرکز قرار دهد. یک بالشتک پیش‌فرض را روی مرزهای 64 نقطه اعمال می‌کند.
fitBounds:withPadding:
دوربین را تغییر می دهد تا محدوده های مشخص شده روی صفحه نمایش را در بیشترین سطح بزرگنمایی در مرکز قرار دهد. از این روش برای مشخص کردن لایه یکسان، در نقاط، برای همه طرف‌های جعبه مرزی استفاده کنید.
fitBounds:withEdgeInsets:
دوربین را تغییر می دهد تا محدوده های مشخص شده روی صفحه نمایش را در بیشترین سطح بزرگنمایی در مرکز قرار دهد. با UIEdgeInsets ، شما padding را برای هر طرف جعبه مرزی به طور مستقل مشخص می کنید.

از GMSMapView برای تغییر یک ویژگی استفاده کنید

GMSMapView چندین روش ارائه می دهد که به شما امکان می دهد دوربین را بدون استفاده از شیء GMSCameraPosition یا شیء GMSCameraUpdate حرکت دهید. با این روش‌ها، مانند animateToLocation: یا animateToZoom: می‌توانید تغییری را در یک ویژگی دوربین متحرک کنید.

برای مثال، از روش toViewingAngle: برای متحرک سازی تغییر در شیب دوربین استفاده کنید.

سویفت

mapView.animate(toViewingAngle: 45)
      

هدف-C

[mapView animateToViewingAngle:45];
      

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

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

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

سویفت

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

هدف-C

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))
      

هدف-C

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

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

سویفت

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

هدف-C

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

بلبرینگ تنظیم (جهت گیری)

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

یاتاقان را با برنامه GMSCameraPosition یا GMSCameraUpdate یا با متد animateToBearing: GMSMapView تنظیم کنید.

سویفت

mapView.animate(toBearing: 0)
      

هدف-C

[mapView animateToBearing:0];
      

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

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

زاویه دید می تواند بین 0 (نقطه مستقیم به سمت پایین روی نقشه) و حداکثر وابسته به سطح زوم باشد. برای سطح زوم 16 یا بالاتر، حداکثر زاویه 65 درجه است. برای سطح زوم 10 یا کمتر، حداکثر زاویه 30 درجه است.

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

سویفت

mapView.animate(toViewingAngle: 45)
      

هدف-C

[mapView animateToViewingAngle:45];
      

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

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

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

سویفت

mapView.animate(toZoom: 12)
      

هدف-C

[mapView animateToZoom:12];
      

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

سویفت

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

هدف-C

// 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
      

هدف-C

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

سویفت

mapView.cameraTargetBounds = bounds
      

هدف-C

mapView.cameraTargetBounds = bounds;
      

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

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

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

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

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

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

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

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

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

سویفت

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

هدف-C

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)
      

هدف-C

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

اگر پس از به‌روزرسانی کوچک‌ترین و حداکثر زوم، سطح زوم دوربین روی مقداری خارج از محدوده جدید تنظیم شود، بزرگ‌نمایی فعلی به‌طور خودکار به‌روزرسانی می‌شود تا نزدیک‌ترین مقدار معتبر را نمایش دهد. به عنوان مثال، در کد زیر، بزرگنمایی اصلی به صورت 4 تعریف شده است. وقتی محدوده بزرگنمایی بعداً روی 10-15 تنظیم شود، بزرگنمایی فعلی به 10 به روز می شود.

سویفت

// 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)
      

هدف-C

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

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

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

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

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

نمای نقشه

Maps SDK برای iOS از پیش‌بینی Mercator برای نمایش سطح جهان (یک کره) در صفحه دستگاه شما (یک صفحه تخت) استفاده می‌کند.

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

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

نمودار مشخصات دوربین

هدف (مکان)

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

عرض جغرافیایی می تواند بین 85- تا 85 درجه باشد. مقادیر بالاتر یا پایین‌تر از این محدوده به نزدیک‌ترین مقدار در این محدوده گیره می‌شوند. برای مثال، با تعیین عرض جغرافیایی 100، مقدار 85 تنظیم می شود. مقادیر بالاتر یا پایین تر از این محدوده به گونه ای بسته بندی می شوند که در محدوده (-180، 180) قرار می گیرند. به عنوان مثال، 480، 840 و 1200 همه تا 120 درجه پیچیده می شوند.

بلبرینگ (جهت گیری)

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

یاتاقان 0 به این معنی است که بالای نقشه به شمال واقعی اشاره می کند. مقدار باربری 90 به معنای بالای نقاط نقشه به سمت شرق است (90 درجه روی قطب نما). مقدار 180 به معنای بالای نقاط نقشه به سمت جنوب است.

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

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

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

در تصاویر زیر زاویه دید 0 درجه است. تصویر اول شماتیکی از این را نشان می دهد. موقعیت 1 موقعیت دوربین و موقعیت 2 موقعیت فعلی نقشه است. نقشه حاصل در زیر آن نشان داده شده است.

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

در تصاویر زیر زاویه دید 45 درجه است. توجه داشته باشید که دوربین در نیمه راه در امتداد قوس بین مستقیم بالای سر (0 درجه) و زمین (90 درجه) به موقعیت 3 حرکت می کند. دوربین همچنان به نقطه مرکزی نقشه اشاره می کند، اما منطقه ای که با خط در موقعیت 4 نشان داده شده است اکنون قابل مشاهده است.

تصویری از نقشه با دوربینی که در زاویه دید 45 درجه، در سطح زوم 18 قرار گرفته است.
نقشه با زاویه دید 45 درجه نمایش داده می شود.
نموداری که زاویه دید دوربین را روی 45 درجه تنظیم کرده و سطح زوم هنوز روی 18 تنظیم شده است.
زاویه دید دوربین 45 درجه.

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

بزرگنمایی ضربه بزنید؛

سطح زوم دوربین مقیاس نقشه را تعیین می کند. در سطوح بزرگنمایی بزرگتر، جزئیات بیشتری روی صفحه نمایش دیده می شود، در حالی که در سطوح بزرگنمایی کوچکتر، می توان بیشتر جهان را روی صفحه مشاهده کرد. در سطح زوم 0، مقیاس نقشه به گونه ای است که پهنای کل جهان تقریباً 256 نقطه است.

افزایش سطح زوم به میزان 1، عرض جهان روی صفحه را دو برابر می کند. بنابراین در سطح زوم N، عرض جهان تقریباً 256 * 2 N است. به عنوان مثال، در سطح زوم 2، کل جهان تقریباً 1024 نقطه عرض دارد.

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

  • 1: جهان
  • 5: خشکی / قاره
  • 10: شهر
  • 15: خیابان ها
  • 20: ساختمان ها
تصاویر زیر نمای بصری سطوح مختلف زوم را نشان می دهد:
اسکرین شات از نقشه در سطح زوم 5
نقشه در سطح زوم 5.
اسکرین شات از نقشه در سطح زوم 15
نقشه در سطح زوم 15.
اسکرین شات از نقشه در سطح زوم 20
نقشه در سطح زوم 20.

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

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

هدف-C

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)

هدف-C

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
      

هدف-C

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: دوربین را به روز کنید.

سویفت

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

هدف-C

// 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)
      

هدف-C

// 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:
سطح زوم فعلی را 1.0 تغییر دهید، در حالی که سایر ویژگی ها را یکسان نگه دارید.
zoomTo:
سطح بزرگنمایی را به مقدار داده شده تغییر می دهد، در حالی که همه ویژگی های دیگر را یکسان نگه می دارد.
zoomBy:
سطح بزرگنمایی را با مقدار داده شده افزایش می دهد (یا کاهش می دهد، در صورت منفی بودن مقدار).
zoomBy:atPoint:
سطح بزرگنمایی را با مقدار داده شده افزایش می دهد (یا کاهش می دهد، در صورت منفی بودن مقدار)، در حالی که موقعیت نقطه مشخص شده روی صفحه را حفظ می کند.
setTarget:
طول و عرض جغرافیایی دوربین را تغییر می دهد، در حالی که تمام خصوصیات دیگر را حفظ می کند.
setTarget:zoom:
طول جغرافیایی، طول و زوم دوربین را تغییر می دهد، در حالی که تمام خصوصیات دیگر را حفظ می کند.
setCamera:
یک GMSCameraPosition جدید تنظیم می کند.
scrollByX:Y:
طول و عرض جغرافیایی دوربین را تغییر می دهد تا نقشه را بر اساس تعداد نقاط مشخص شده جابجا کند. یک مقدار x مثبت باعث می شود دوربین به سمت راست حرکت کند، به طوری که به نظر می رسد نقشه به سمت چپ حرکت کرده است. یک مقدار مثبت y باعث می شود دوربین به سمت پایین حرکت کند، به طوری که به نظر می رسد نقشه به سمت بالا حرکت کرده است. پیمایش نسبت به بلبرینگ فعلی دوربین است. به عنوان مثال، اگر دوربین دارای یک یاتاقان 90 درجه باشد، شرق "بالا" است.
fitBounds:
دوربین را تغییر می دهد تا محدوده های مشخص شده روی صفحه نمایش را در بیشترین سطح بزرگنمایی در مرکز قرار دهد. یک بالشتک پیش‌فرض را روی مرزهای 64 نقطه اعمال می‌کند.
fitBounds:withPadding:
دوربین را تغییر می دهد تا محدوده های مشخص شده روی صفحه نمایش را در بیشترین سطح بزرگنمایی در مرکز قرار دهد. از این روش برای مشخص کردن لایه یکسان، در نقاط، برای همه طرف‌های جعبه مرزی استفاده کنید.
fitBounds:withEdgeInsets:
دوربین را تغییر می دهد تا محدوده های مشخص شده روی صفحه نمایش را در بیشترین سطح بزرگنمایی در مرکز قرار دهد. با UIEdgeInsets ، شما padding را برای هر طرف جعبه مرزی به طور مستقل مشخص می کنید.

از GMSMapView برای تغییر یک ویژگی استفاده کنید

GMSMapView چندین روش ارائه می دهد که به شما امکان می دهد دوربین را بدون استفاده از شیء GMSCameraPosition یا شیء GMSCameraUpdate حرکت دهید. با این روش‌ها، مانند animateToLocation: یا animateToZoom: می‌توانید تغییری را در یک ویژگی دوربین متحرک کنید.

برای مثال، از روش toViewingAngle: برای متحرک سازی تغییر در شیب دوربین استفاده کنید.

سویفت

mapView.animate(toViewingAngle: 45)
      

هدف-C

[mapView animateToViewingAngle:45];
      

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

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

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

سویفت

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

هدف-C

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))
      

هدف-C

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

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

سویفت

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

هدف-C

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

بلبرینگ تنظیم (جهت گیری)

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

یاتاقان را با برنامه GMSCameraPosition یا GMSCameraUpdate یا با متد animateToBearing: GMSMapView تنظیم کنید.

سویفت

mapView.animate(toBearing: 0)
      

هدف-C

[mapView animateToBearing:0];
      

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

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

زاویه دید می تواند بین 0 (نقطه مستقیم به سمت پایین روی نقشه) و حداکثر وابسته به سطح زوم باشد. برای سطح زوم 16 یا بالاتر، حداکثر زاویه 65 درجه است. برای سطح زوم 10 یا کمتر، حداکثر زاویه 30 درجه است.

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

سویفت

mapView.animate(toViewingAngle: 45)
      

هدف-C

[mapView animateToViewingAngle:45];
      

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

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

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

سویفت

mapView.animate(toZoom: 12)
      

هدف-C

[mapView animateToZoom:12];
      

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

سویفت

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

هدف-C

// 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
      

هدف-C

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

سویفت

mapView.cameraTargetBounds = bounds
      

هدف-C

mapView.cameraTargetBounds = bounds;
      

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

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

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

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

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

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

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

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

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

سویفت

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

هدف-C

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)
      

هدف-C

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

اگر پس از به‌روزرسانی کوچک‌ترین و حداکثر زوم، سطح زوم دوربین روی مقداری خارج از محدوده جدید تنظیم شود، بزرگ‌نمایی فعلی به‌طور خودکار به‌روزرسانی می‌شود تا نزدیک‌ترین مقدار معتبر را نمایش دهد. به عنوان مثال، در کد زیر، بزرگنمایی اصلی به صورت 4 تعریف شده است. وقتی محدوده بزرگنمایی بعداً روی 10-15 تنظیم شود، بزرگنمایی فعلی به 10 به روز می شود.

سویفت

// 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)
      

هدف-C

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