با 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 موقعیت فعلی نقشه است. نقشه حاصل در زیر آن نشان داده شده است.
در تصاویر زیر زاویه دید 45 درجه است. توجه داشته باشید که دوربین در نیمه راه در امتداد قوس بین مستقیم بالای سر (0 درجه) و زمین (90 درجه) به موقعیت 3 حرکت می کند. دوربین همچنان به نقطه مرکزی نقشه اشاره می کند، اما منطقه ای که با خط در موقعیت 4 نشان داده شده است اکنون قابل مشاهده است.
نقشه در این اسکرین شات همچنان در همان نقطه در نقشه اصلی قرار دارد، اما ویژگی های بیشتری در بالای نقشه ظاهر شده است. با افزایش زاویه بیش از 45 درجه، ویژگیهای بین دوربین و موقعیت نقشه به نسبت بزرگتر به نظر میرسند، در حالی که ویژگیهای فراتر از موقعیت نقشه نسبتاً کوچکتر به نظر میرسند و جلوهای سهبعدی ایجاد میکنند.
بزرگنمایی ضربه بزنید؛
سطح زوم دوربین مقیاس نقشه را تعیین می کند. در سطوح بزرگنمایی بزرگتر، جزئیات بیشتری روی صفحه نمایش دیده می شود، در حالی که در سطوح بزرگنمایی کوچکتر، می توان بیشتر جهان را روی صفحه مشاهده کرد. در سطح زوم 0، مقیاس نقشه به گونه ای است که پهنای کل جهان تقریباً 256 نقطه است.
افزایش سطح زوم به میزان 1، عرض جهان روی صفحه را دو برابر می کند. بنابراین در سطح زوم N، عرض جهان تقریباً 256 * 2 N است. به عنوان مثال، در سطح زوم 2، کل جهان تقریباً 1024 نقطه عرض دارد.
لازم نیست سطح بزرگنمایی یک عدد صحیح باشد. محدوده سطوح بزرگنمایی مجاز توسط نقشه به عوامل مختلفی از جمله هدف، نوع نقشه و اندازه صفحه بستگی دارد. هر عدد خارج از محدوده به نزدیکترین مقدار معتبر بعدی تبدیل می شود که می تواند حداقل سطح بزرگنمایی یا حداکثر سطح بزرگنمایی باشد. لیست زیر سطح تقریبی جزئیاتی را که می توانید انتظار داشته باشید در هر سطح بزرگنمایی ببینید را نشان می دهد:
- 1: جهان
- 5: خشکی / قاره
- 10: شهر
- 15: خیابان ها
- 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];
مرزها را تعیین کنید
برای جابجایی دوربین به طوری که کل ناحیه مورد نظر در بیشترین سطح زوم ممکن قابل مشاهده باشد، برای نمای دوربین مرزهایی را تعیین کنید. به عنوان مثال، اگر می خواهید تمام پمپ بنزین ها را در فاصله پنج مایلی موقعیت فعلی کاربر نمایش دهید، دوربین را حرکت دهید تا همه آنها روی صفحه قابل مشاهده باشند:
-
GMSCoordinateBounds
را که می خواهید روی صفحه قابل مشاهده باشد، محاسبه کنید. - از روش
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];
با 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 موقعیت فعلی نقشه است. نقشه حاصل در زیر آن نشان داده شده است.
در تصاویر زیر زاویه دید 45 درجه است. توجه داشته باشید که دوربین در نیمه راه در امتداد قوس بین مستقیم بالای سر (0 درجه) و زمین (90 درجه) به موقعیت 3 حرکت می کند. دوربین همچنان به نقطه مرکزی نقشه اشاره می کند، اما منطقه ای که با خط در موقعیت 4 نشان داده شده است اکنون قابل مشاهده است.
نقشه در این اسکرین شات همچنان در همان نقطه در نقشه اصلی قرار دارد، اما ویژگی های بیشتری در بالای نقشه ظاهر شده است. با افزایش زاویه بیش از 45 درجه، ویژگیهای بین دوربین و موقعیت نقشه به نسبت بزرگتر به نظر میرسند، در حالی که ویژگیهای فراتر از موقعیت نقشه نسبتاً کوچکتر به نظر میرسند و جلوهای سهبعدی ایجاد میکنند.
بزرگنمایی ضربه بزنید؛
سطح زوم دوربین مقیاس نقشه را تعیین می کند. در سطوح بزرگنمایی بزرگتر، جزئیات بیشتری روی صفحه نمایش دیده می شود، در حالی که در سطوح بزرگنمایی کوچکتر، می توان بیشتر جهان را روی صفحه مشاهده کرد. در سطح زوم 0، مقیاس نقشه به گونه ای است که پهنای کل جهان تقریباً 256 نقطه است.
افزایش سطح زوم به میزان 1، عرض جهان روی صفحه را دو برابر می کند. بنابراین در سطح زوم N، عرض جهان تقریباً 256 * 2 N است. به عنوان مثال، در سطح زوم 2، کل جهان تقریباً 1024 نقطه عرض دارد.
لازم نیست سطح بزرگنمایی یک عدد صحیح باشد. محدوده سطوح بزرگنمایی مجاز توسط نقشه به عوامل مختلفی از جمله هدف، نوع نقشه و اندازه صفحه بستگی دارد. هر عدد خارج از محدوده به نزدیکترین مقدار معتبر بعدی تبدیل می شود که می تواند حداقل سطح بزرگنمایی یا حداکثر سطح بزرگنمایی باشد. لیست زیر سطح تقریبی جزئیاتی را که می توانید انتظار داشته باشید در هر سطح بزرگنمایی ببینید را نشان می دهد:
- 1: جهان
- 5: خشکی / قاره
- 10: شهر
- 15: خیابان ها
- 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];
مرزها را تعیین کنید
برای جابجایی دوربین به طوری که کل ناحیه مورد نظر در بیشترین سطح زوم ممکن قابل مشاهده باشد، برای نمای دوربین مرزهایی را تعیین کنید. به عنوان مثال، اگر می خواهید تمام پمپ بنزین ها را در فاصله پنج مایلی موقعیت فعلی کاربر نمایش دهید، دوربین را حرکت دهید تا همه آنها روی صفحه قابل مشاهده باشند:
-
GMSCoordinateBounds
را که می خواهید روی صفحه قابل مشاهده باشد، محاسبه کنید. - از روش
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];
با 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 موقعیت فعلی نقشه است. نقشه حاصل در زیر آن نشان داده شده است.
در تصاویر زیر زاویه دید 45 درجه است. توجه داشته باشید که دوربین در نیمه راه در امتداد قوس بین مستقیم بالای سر (0 درجه) و زمین (90 درجه) به موقعیت 3 حرکت می کند. دوربین همچنان به نقطه مرکزی نقشه اشاره می کند، اما منطقه ای که با خط در موقعیت 4 نشان داده شده است اکنون قابل مشاهده است.
نقشه در این اسکرین شات همچنان در همان نقطه در نقشه اصلی قرار دارد، اما ویژگی های بیشتری در بالای نقشه ظاهر شده است. با افزایش زاویه بیش از 45 درجه، ویژگیهای بین دوربین و موقعیت نقشه به نسبت بزرگتر به نظر میرسند، در حالی که ویژگیهای فراتر از موقعیت نقشه نسبتاً کوچکتر به نظر میرسند و جلوهای سهبعدی ایجاد میکنند.
بزرگنمایی ضربه بزنید؛
سطح زوم دوربین مقیاس نقشه را تعیین می کند. در سطوح بزرگنمایی بزرگتر، جزئیات بیشتری روی صفحه نمایش دیده می شود، در حالی که در سطوح بزرگنمایی کوچکتر، می توان بیشتر جهان را روی صفحه مشاهده کرد. در سطح زوم 0، مقیاس نقشه به گونه ای است که پهنای کل جهان تقریباً 256 نقطه است.
افزایش سطح زوم به میزان 1، عرض جهان روی صفحه را دو برابر می کند. بنابراین در سطح زوم N، عرض جهان تقریباً 256 * 2 N است. به عنوان مثال، در سطح زوم 2، کل جهان تقریباً 1024 نقطه عرض دارد.
لازم نیست سطح بزرگنمایی یک عدد صحیح باشد. محدوده سطوح بزرگنمایی مجاز توسط نقشه به عوامل مختلفی از جمله هدف، نوع نقشه و اندازه صفحه بستگی دارد. هر عدد خارج از محدوده به نزدیکترین مقدار معتبر بعدی تبدیل می شود که می تواند حداقل سطح بزرگنمایی یا حداکثر سطح بزرگنمایی باشد. لیست زیر سطح تقریبی جزئیاتی را که می توانید انتظار داشته باشید در هر سطح بزرگنمایی ببینید را نشان می دهد:
- 1: جهان
- 5: خشکی / قاره
- 10: شهر
- 15: خیابان ها
- 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];
مرزها را تعیین کنید
برای جابجایی دوربین به طوری که کل ناحیه مورد نظر در بیشترین سطح زوم ممکن قابل مشاهده باشد، برای نمای دوربین مرزهایی را تعیین کنید. به عنوان مثال، اگر می خواهید تمام پمپ بنزین ها را در فاصله پنج مایلی موقعیت فعلی کاربر نمایش دهید، دوربین را حرکت دهید تا همه آنها روی صفحه قابل مشاهده باشند:
-
GMSCoordinateBounds
را که می خواهید روی صفحه قابل مشاهده باشد، محاسبه کنید. - از روش
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];