الكاميرا والعرض

تنظيم صفحاتك في مجموعات يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.
اختيار نظام أساسي: Android iOS JavaScript

باستخدام SDK للخرائط في نظام التشغيل iOS، يمكنك تغيير زاوية عرض الخريطة من خلال تغيير كاميرا الخريطة.

باستخدام SDK للخرائط في نظام التشغيل iOS، يمكن للمستخدمين إمالة خرائطك وتدويرها لضبطها على اتجاه مفيد لسياقهم. في أي مستوى من التكبير/التصغير، يمكن للمستخدمين تحريك الخريطة أو تغيير منظورها مع تقليل وقت الاستجابة.

لا تؤدي التغييرات التي تطرأ على الكاميرا إلى تغيير العلامات أو الخطوط المتعددة أو الرسومات الأخرى التي أضفتها، على الرغم من أنك قد تحتاج إلى تغيير هذه الإضافات لتتناسب مع العرض الجديد بشكل أفضل.

عرض الخريطة

تستخدم حزمة تطوير البرامج (SDK) للخرائط لنظام التشغيل iOS إسقاط الإسقاط لتمثيل سطح العالم (صورة بانورامية) على شاشة جهازك (طائرة مسطحة).

موضع الكاميرا

تم تصميم عرض الخريطة على هيئة كاميرا تنظر إلى الأسفل على متن طائرة مسطحة. يتم تحديد موضع الكاميرا (وبالتالي عرض الخريطة) من خلال الخصائص التالية: الهدف (موقع خط العرض/خط الطول)، والاتجاه، والإمالة، والتكبير/التصغير.

رسم توضيحي لخصائص الكاميرا

الهدف (الموقع الجغرافي)

هدف الكاميرا هو موقع مركز الخريطة، المحدد على هيئة إحداثيات خطوط الطول والعرض.

يمكن أن يتراوح خط العرض بين -85 و85 درجة، بما في ذلك القيم الواقعة بينهما. سيتم تقريب القيم التي تتجاوز هذا النطاق أو تقل عنه إلى أقرب قيمة ضمن هذا النطاق. على سبيل المثال، يؤدي تحديد خط عرض 100 إلى تعيين القيمة إلى 85. يتراوح خط الطول من -180 إلى 180 درجة، بما في ذلك خط الطول. ويتم التفاف القيم التي تتجاوز هذا النطاق أو تقل عنه بحيث تقع ضمن النطاق (-180 أو 180). على سبيل المثال، سيتم التفاف كل من 480 و840 و1200 إلى 120 درجة.

الاتجاه (الاتجاه)

يحدد اتجاه الكاميرا اتجاه البوصلة، ويتم القياس بالدرجات من الشمال الحقيقي، بما يتوافق مع الحافة العلوية للخريطة. إذا رسمت خطًا رأسيًا من مركز الخريطة إلى الحافة العلوية للخريطة، فإن الحامل يتوافق مع عنوان الكاميرا (يتم قياسه بالدرجات) بالنسبة إلى الشمال الحقيقي.

يشير الاتجاه 0 إلى أن الجزء العلوي من الخريطة يشير إلى الشمال صحيح. تعني القيمة الحاملة 90 أعلى نقاط الخريطة المستحقة شرقًا (90 درجة على البوصلة). تعني القيمة 180 أعلى نقاط الخريطة المستحقة للجنوب.

تتيح لك 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 * 2N نقطة. على سبيل المثال، في مستوى التكبير/التصغير 2، يبلغ عرض العالم بأسره 1024 نقطة تقريبًا.

لا يلزم أن يكون مستوى التكبير/التصغير عددًا صحيحًا. يعتمد نطاق مستويات التكبير/التصغير المسموح به في الخريطة على عدد من العوامل بما في ذلك الهدف ونوع الخريطة وحجم الشاشة. وسيتم تحويل أي رقم خارج النطاق إلى أقرب قيمة صالحة تالية، والتي يمكن أن تكون إما الحد الأدنى لمستوى التكبير أو التصغير. تعرض القائمة التالية المستوى التقريبي للتفاصيل الذي يمكنك توقع مشاهدته في كل مستوى من مستويات التكبير:

  • 1: العالم
  • 5: مساحة اليابسة/القارة
  • 10: مدينة
  • 15: الشوارع
  • 20: المباني
توضّح الصور التالية المظهر المرئي لمستويات التكبير أو التصغير المختلفة:
لقطة شاشة لخريطة على مستوى تكبير/تصغير 5
خريطة على مستوى التكبير/التصغير 5.
لقطة شاشة لخريطة على مستوى التكبير/التصغير 15
خريطة على مستوى التكبير/التصغير 15.
لقطة شاشة لخريطة في مستوى التكبير/التصغير 20
خريطة على مستوى التكبير/التصغير 20.

تعيين موضع الكاميرا الأولي

عيِّن موضع الكاميرا الأولي باستخدام الكائن GMSCameraPosition، الذي يتيح لك تعيين خط العرض وخط الطول للهدف مع الاتجاه والإمالة والتكبير/التصغير.

لضبط موضع الكاميرا الأوّلي، عليك إنشاء كائن GMSCameraPosition ثم تمرير هذا الكائن إلى منشئ التصميم المناسب GMSMapView.

Swift

let camera = GMSCameraPosition(
  latitude: -33.8683,
  longitude: 151.2086,
  zoom: 16
)
mapView = GMSMapView(frame: self.view.bounds, camera: camera)
      

Objective-C

GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:-33.8683
                                                        longitude:151.2086
                                                             zoom:16];
mapView = [GMSMapView mapWithFrame:self.view.bounds camera:camera];
      

ويمكنك أيضًا إنشاء الكائن GMSMapView باستخدام طريقة init التلقائية في UIView. في هذه الحالة، يبدأ موضع الكاميرا من الموقع التلقائي، ثم تغيره بعد الإنشاء.

Swift

mapView = GMSMapView(frame: self.view.bounds)
      

Objective-C

mapView = [[GMSMapView alloc] initWithFrame:self.view.bounds];
      

تغيير موضع الكاميرا

يمكنك تغيير موضع الكاميرا آليًا لتعيين الموقع والاتجاه والإمالة والتكبير/التصغير. على الرغم من أن GMSMapView يوفر عدّة طرق يمكنك استخدامها لتغيير موضع الكاميرا، يمكنك عادة استخدام GMSCameraPosition أو GMSCameraUpdate:

  • يحتوي GMSCameraPosition على خصائص وطرق تستخدمها لتغيير كل معلمة موضع للكاميرا: استهداف، وحمل، وإمالة، وتكبير.

  • GMSCameraUpdate يتيح لك تغيير الهدف والحمل والإمالة والتكبير/التصغير، كما يتضمّن طرق راحة إضافية لإتاحة التمرير والتكبير/التصغير المتقدم ووسط الكاميرا داخل حدود محدّدة مسبقًا والمزيد.

عند تحريك الكاميرا، يمكنك اختيار "التقاط" الكاميرا إلى الموضع الجديد، بمعنى أنه لا يوجد أي رسوم متحركة، أو تحريك الحركة. على سبيل المثال، إذا حركت تغييرًا إلى الموقع المستهدف للكاميرا، فستتحرك الصورة المتحركة من الموقع القديم إلى الموقع الجديد.

تدخل الصورة المتحركة بين سمات الكاميرا الحالية وسمات الكاميرا الجديدة. ويمكنك التحكّم في مدة تشغيل الحركة باستخدام الرسوم المتحركة الأساسية.

استخدام GMSCameraPosition

لتغيير الكاميرا باستخدام GMSCameraPosition، عليك إنشاء كائن جديد أو نسخ كائن حالي ثم ضبطه على الكائن GMSMapView. استخدم الكائن GMSCameraPosition لالتقاط الكاميرا إلى الموقع الجديد مع تشغيل الرسوم المتحركة أو بدونها.

يمكنك استخدام الكائن GMSCameraPosition لضبط خصائص الكاميرا، مثلاً خط العرض وخط الطول والتكبير/التصغير والحمل وزاوية العرض. ويمكنك بعد ذلك استخدام هذا الكائن لضبط سمة camera على GMSMapView.

Swift

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

Objective-C

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

احذف أي سمة من سمات GMSCameraPosition التي تريد ضبطها على قيمتها التلقائية.

لتحريك الحركة، استخدم طريقة animateToCameraPosition: بدلاً من إعداد السمة camera.

استخدام GMSCameraUpdate

GMSCameraUpdate يتيح لك تحديث موضع الكاميرا، واختيار ما إذا كنت تريد التقاط ذلك الموضع أو تحريكه للموضع الجديد. ويستفيد GMSCameraUpdate من الراحة. يمكنك استخدام GMSCameraPosition لتنفيذ المهام نفسها التي ينفذها تطبيق GMSCameraUpdate، ولكن يوفر تطبيق GMSCameraUpdate طرق مساعدة إضافية لتسهيل التلاعب في الكاميرا.

على سبيل المثال، لاستخدام GMSCameraPosition لزيادة مستوى التكبير/التصغير الحالي، عليك أولاً تحديد مستوى التكبير أو التصغير الحالي، ثم إنشاء كائن GMSCameraPosition حيث يمكنك تعيين التكبير/التصغير إلى قيمة أكبر من التكبير/التصغير الحالي.

وبدلاً من ذلك، يمكنك إنشاء كائن GMSCameraUpdate باستخدام طريقة المصنع zoomIn:. بعد ذلك، عدِّل الكاميرا عبر تمرير الكائن GMSCameraUpdate إلى الطريقة GMSMapView animateWithCameraUpdate:.

Swift

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

Objective-C

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

استخدم طريقة GMSMapView moveCamera: لالتقاط الكاميرا إلى الموضع الجديد بدلاً من ذلك.

في المثال التالي، عليك استخدام GMSCameraUpdate لتحريك حركة الكاميرا لتوسيطها في فانكوفر.

Swift

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

Objective-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، يمكنك تحديد المساحة المتروكة لكل جانب من مربّع الإحاطة بشكل مستقل.

استخدام GMSMapView لتغيير موقع واحد

توفّر GMSMapView عدة طرق تتيح لك تحريك الكاميرا بدون استخدام كائن GMSCameraPosition أو كائن GMSCameraUpdate. باستخدام هذه الطرق، مثل animateToLocation: أو animateToZoom:، يمكنك تحريك التغيير إلى موقع كاميرا واحد.

على سبيل المثال، استخدم طريقة toViewingAngle: لتحريك التغيير إلى إمالة الكاميرا.

Swift

mapView.animate(toViewingAngle: 45)
      

Objective-C

[mapView animateToViewingAngle:45];
      

تعيين الهدف (الموقع)

يحدد الموقع مركز الخريطة. يتم تحديد المواقع الجغرافية حسب خط العرض وخط الطول، ويتم تمثيلها آليًا بواسطة CLLocationCoordinate2D، التي تم إنشاؤها باستخدام CLLocationCoordinate2DMake.

استخدِم GMSCameraPosition لتغيير الموقع الجغرافي. في هذا المثال، تستقر الخريطة على الموقع الجديد.

Swift

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

Objective-C

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

لتحريك التغيير وتحريك الخريطة إلى الموقع الجديد، يمكنك استخدام طريقة animateToCameraPosition: بدلاً من تعيين خاصية camera. أو يمكنك استخدام طريقة animateToLocation: على GMSMapView.

Swift

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

Objective-C

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

يمكنك أيضًا إنشاء كائن GMSCameraUpdate لتحريك الكاميرا. استخدِم الطريقة المضمّنة الخاصة بها scrollByX:Y: لتحديد عدد النقاط لتمرير الكاميرا في الاتجاهين X وY. في هذا المثال، تمرر الكاميرا 200 نقطة إلى اليمين و100 نقطة لأسفل:

Swift

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

Objective-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.

Swift

mapView.animate(toBearing: 0)
      

Objective-C

[mapView animateToBearing:0];
      

تعيين الإمالة (زاوية العرض)

تعد زاوية العرض موضع الكاميرا على قوس بين موضع الخريطة في منتصفها مباشرة وعلى سطح الأرض، ويتم قياسها بالدرجات من النظير (الاتجاه الذي يوجه أسفل الكاميرا مباشرة). عند تغيير زاوية العرض، تظهر الخريطة في المنظور، مع ظهور ميزات بين الكاميرا وموضع الخريطة بشكل متناسب، وتظهر المواضع خارج موضع الخريطة بشكل أصغر نسبيًا، مما ينتج عنه تأثير ثلاثي الأبعاد.

يمكن أن تتراوح زاوية العرض بين 0 (موجهًا لأسفل مباشرة في الخريطة)، وتصل إلى أقصى حد يعتمد على مستوى التكبير/التصغير. بالنسبة إلى مستوى التكبير/التصغير 16 وأعلى، تكون الزاوية القصوى هي 65 درجة. بالنسبة إلى مستوى التكبير/التصغير 10 أو أقل، يبلغ الحد الأقصى للزاوية 30 درجة.

يمكنك ضبط زاوية العرض برمجيًا باستخدام GMSCameraPosition أو GMSCameraUpdate أو باستخدام طريقة animateToViewingAngle: وهي GMSMapView.

Swift

mapView.animate(toViewingAngle: 45)
      

Objective-C

[mapView animateToViewingAngle:45];
      

ضبط التكبير أو التصغير

يحدد مستوى تكبير/تصغير الكاميرا حجم الخريطة. على مستويات تكبير/تصغير أكبر، يمكنك مشاهدة المزيد من التفاصيل على الشاشة، بينما في مستويات التكبير/التصغير الأصغر، يمكنك مشاهدة المزيد من مناطق العالم.

يمكنك ضبط قيمة التكبير أو التصغير بشكل آلي باستخدام GMSCameraPosition أو GMSCameraUpdate أو باستخدام طريقة animateToZoom: من النوع GMSMapView.

Swift

mapView.animate(toZoom: 12)
      

Objective-C

[mapView animateToZoom:12];
      

يستخدم المثال التالي طريقة المصنع zoomIn: لإنشاء كائن GMSCameraUpdate لتحريك التكبير بمقدار مستوى واحد من المستوى الحالي.

Swift

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

Objective-C

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

ضبط الحدود

لتحريك الكاميرا بحيث تصبح منطقة الاهتمام بأكملها مرئية على أكبر مستوى ممكن من التكبير، عيّن حدودًا لعرض الكاميرا. على سبيل المثال، إذا كنت تريد عرض جميع محطات الوقود في نطاق خمسة أميال من الموضع الحالي للمستخدم، فحرِّك الكاميرا حتى تكون جميعها مرئية على الشاشة:

  1. احسب قيمة GMSCoordinateBounds التي تريد أن تكون مرئية على الشاشة.
  2. استخدِم طريقة cameraForBounds:insets: في السمة GMSMapView لعرض قيمة GMSCameraPosition جديدة.

يضمن تعيين هذه الحدود أن يكون GMSCoordinateBounds المحدد مناسبًا تمامًا ضمن حجم الخريطة الحالية. لاحظ أن هذه الطريقة تحدد إمالة الخريطة ومحملها إلى القيمة 0.

يوضح المثال التالي كيفية تغيير الكاميرا بحيث تظهر مدينتا فانكوفر وكالغاري في العرض نفسه.

Swift

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

Objective-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 على "بدون".

Swift

mapView.cameraTargetBounds = bounds
      

Objective-C

mapView.cameraTargetBounds = bounds;
      

يوضّح الرسم البياني التالي سيناريو عندما يكون هدف الكاميرا مقتصرًا على منطقة أكبر قليلاً من إطار العرض. يمكن للمستخدم التمرير والتحريك، بشرط أن يظل هدف الكاميرا داخل المنطقة المرتبطة. يمثل المقطع المتقاطع هدف الكاميرا:

رسم بياني يُظهر حدود الكاميرا الأكبر من إطار العرض.

تملأ الخريطة دائمًا إطار العرض، حتى إذا أدى ذلك إلى عرض إطار العرض للمناطق خارج الحدود المحددة. على سبيل المثال، إذا حددت موضع الكاميرا المستهدف في أحد أركان المنطقة المرتبطة، فإن المنطقة خارج الزاوية ستكون مرئية في إطار العرض ولكن لا يمكن للمستخدمين التمرير إلى تلك المنطقة. يوضّح الرسم البياني التالي هذا السيناريو. يمثل المقطع المتقاطع هدف الكاميرا:

مخطَّط يوضّح هدف الكاميرا وهو يقع في الزاوية السفلية اليمنى من حدود الكاميرا.

في الرسم التخطيطي التالي، يتم تقييد قيود الكاميرا بشكل كبير، مما يمنح المستخدم فرصة ضئيلة جدًا للتمرير أو تحريك الخريطة. يمثل الصليب هدف الكاميرا:

مخطَّط يوضّح حدود الكاميرا الأصغر من إطار العرض.

تعيين حد أدنى أو أقصى للتكبير/التصغير

تحدد الثوابت العالمية kGMSMinZoomLevel وkGMSMaxZoomLevel الحد الأدنى أو الأقصى لقيم التكبير أو التصغير. بشكل تلقائي، يتم ضبط السمتَين minZoom وmaxZoom في GMSMapView على هذه الثوابت.

لتقييد نطاق مستويات التكبير/التصغير المتاحة للخريطة، عيّن الحد الأدنى والأقصى لمستوى التكبير/التصغير. يعمل الرمز التالي على تقييد مستوى التكبير/التصغير إلى ما بين 10 و15.

Swift

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

Objective-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. وتكون هذه الطريقة مفيدة عند تقييد قيمة واحدة فقط من القيم. تعمل الشفرة التالية على تغيير الحد الأدنى لمستوى التكبير/التصغير فقط.

Swift

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

Objective-C

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

إذا تم تعيين مستوى التكبير/التصغير للكاميرا على قيمة خارج النطاق الجديد بعد تحديث الحد الأدنى والأقصى للتكبير/التصغير، يتم تحديث التكبير/التصغير الحالي تلقائيًا لعرض أقرب قيمة صالحة. على سبيل المثال، في الشفرة التالية، يتم تعريف التكبير التصغير الأصلي على أنه 4. عند ضبط نطاق التكبير أو التصغير في وقت لاحق على 10-15، يتم تحديث التكبير/التصغير الحالي إلى 10.

Swift

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

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