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

اختَر النظام الأساسي: Android iOS JavaScript

باستخدام حزمة تطوير البرامج بالاستناد إلى بيانات "خرائط Google" لنظام التشغيل iOS، يمكنك تغيير وجهة نظر المستخدم على الخريطة عن طريق تغيير كاميرا الخريطة.

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

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

عرض الخريطة

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

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

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

رسم بياني لخصائص الكاميرا

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

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

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

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

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

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

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

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

تحدّد الإمالة وضع الكاميرا على قوس فوق موضع وسط الخريطة مباشرةً، حيث يتم قياسها بالدرجات من النظير (الاتجاه الذي يشير إلى أسفل الكاميرا مباشرةً). تتجاوب القيمة 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 الموجبة إلى تحرّك الكاميرا جهة اليمين، بحيث تبدو الخريطة قد تحركت إلى اليسار. تؤدي قيمة ص الموجبة إلى تحرك الكاميرا للأسفل بحيث تظهر الخريطة وقد تم تحريكها للأعلى. إنّ التمرير مرتبط باتجاه الكاميرا الحالي. على سبيل المثال، إذا كان اتجاه الكاميرا نحو 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];