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

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

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

باستخدام حزمة تطوير البرامج بالاستناد إلى بيانات "خرائط 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 درجة، تظهر العناصر الواقعة بين الكاميرا وموضع الخريطة أكبر نسبيًا، بينما تظهر العناصر التي تقع خارج موضع الخريطة أصغر نسبيًا، ما ينتج عنه تأثير ثلاثي الأبعاد.

Zoom

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

تؤدي زيادة مستوى التكبير/التصغير بمقدار 1 إلى مضاعفة عرض العالم على الشاشة. بالتالي، عند مستوى التكبير/التصغير N، يبلغ عرض العالم حوالي 256 * 2N نقطة. على سبيل المثال، عند مستوى التكبير/التصغير 2، يبلغ عرض العالم بأكمله 1024 نقطة تقريبًا.

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

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

ضبط الموضع الأولي للكاميرا

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

لضبط الموضع الأولي للكاميرا، أنشِئ كائن GMSMapViewOptions واضبط السمة camera على GMSCameraPosition. بعد ذلك، مرِّر خياراتك إلى أداة إنشاء الأدوات السهلة GMSMapView.

Swift

let options = GMSMapViewOptions()
options.camera = GMSCameraPosition.camera(withLatitude: -33.8683, longitude: 151.2086, zoom: 16)
let mapView = GMSMapView(options:options)

Objective-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 التلقائية. في هذه الحالة، يبدأ موضع الكاميرا من الموقع التلقائي ويمكنك تغييره بعد إنشاء المساحة.

Swift

let options = GMSMapViewOptions()
options.frame = self.view.bounds
let mapView = GMSMapView(options:options)

Objective-C

GMSMapViewOptions *options = [[GMSMapViewOptions alloc] init];
options.frame = self.view.bounds;
GMSMapView *mapView = [[GMSMapView alloc] initWithOptions:options];

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

يمكنك تغيير موضع الكاميرا آليًا لضبط الموقع الجغرافي وموضع الاتّجاه والإمالة والتكبير/التصغير. مع أنّ السمة 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 إلى طريقة animateWithCameraUpdate: GMSMapView.

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

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

في المثال التالي، يمكنك استخدام 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:، لتحديد عدد النقاط التي يجب تمريرها إلى الكاميرا في الاتجاهين "س" و"ص". في هذا المثال، تقوم بتمرير الكاميرا 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 على nil.

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