กล้องและมุมมอง

เลือกแพลตฟอร์ม: Android iOS JavaScript

เมื่อใช้ Maps SDK สําหรับ iOS คุณสามารถเปลี่ยนมุมมองของผู้ใช้ แผนที่ได้โดยเปลี่ยนกล้องของแผนที่

ผู้ใช้สามารถใช้ Maps SDK สําหรับ iOS เพื่อเอียงและหมุนแผนที่เพื่อปรับการวางแนวให้เหมาะกับทิศทางที่เลือกได้ ที่ระดับการซูมระดับใดก็ตาม ผู้ใช้สามารถแพนแผนที่หรือเปลี่ยนมุมมองโดยมีเวลาในการตอบสนองต่ํามาก

การเปลี่ยนแปลงในกล้องจะไม่เปลี่ยนแปลงเครื่องหมาย เส้นประกอบ หรือกราฟิกอื่นๆ ที่คุณได้เพิ่มไว้ แต่คุณอาจต้องการเปลี่ยนแปลงส่วนเพิ่มเติมเหล่านี้เพื่อให้เข้ากับมุมมองใหม่ได้ดีขึ้น

มุมมองแผนที่

Maps SDK สําหรับ iOS ใช้การฉายภาพ Merceror เพื่อแสดงพื้นโลก (ลูกโลก) บนหน้าจออุปกรณ์ (ระนาบเดียว)

ตําแหน่งกล้อง

มุมมองแผนที่จําลองแบบกล้องที่มองลงไปบนเครื่องบินแบบราบ ตําแหน่งของกล้อง (และจึงหมายถึงการแสดงภาพแผนที่) ตามคุณสมบัติดังต่อไปนี้ เป้าหมาย (ละติจูด/ลองจิจูด) การเอียง และการซูม

แผนภาพคุณสมบัติของกล้อง

เป้าหมาย (สถานที่)

เป้าหมายของกล้องคือตําแหน่งของศูนย์กลางของแผนที่ ซึ่งระบุเป็นพิกัดละติจูดและลองจิจูด

ละติจูดต้องอยู่ระหว่าง -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 โดยใช้วิธีเริ่มต้น 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 คุณจะระบุ Padding สําหรับกรอบล้อมรอบแต่ละด้านแยกกัน

ใช้ 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 หรือเมธอด GMSMapView ของ animateToBearing:

Swift

mapView.animate(toBearing: 0)
      

Objective-C

[mapView animateToBearing:0];
      

ตั้งค่าการเอียง (มุมการดู)

มุมการดูคือตําแหน่งของกล้องในแนวโค้งอยู่ระหว่างตําแหน่งศูนย์กลางของแผนที่โดยตรงและพื้นผิวโลก ซึ่งวัดเป็นองศาจากจุดดิน (ทิศทางที่ชี้ไปยังด้านล่างกล้อง) เมื่อคุณเปลี่ยนมุมในการมอง แผนที่จะปรากฏโดยมีมุมมอง โดยมีคุณลักษณะระหว่างกล้องกับตําแหน่งของแผนที่ดูใหญ่ขึ้นตามสัดส่วน และคุณลักษณะต่างๆ จะเกินกว่าตําแหน่งแผนที่จะมีขนาดเล็กลงตามที่ได้ ให้ผลลัพธ์แบบสามมิติ

มุมการดูสามารถอยู่ระหว่าง 0 (ชี้ลงตรงแผนที่) และไม่เกินระดับการซูมสูงสุด สําหรับการซูมระดับ 16 ขึ้นไป มุมสูงสุดคือ 65 องศา สําหรับการซูมระดับ 10 หรือต่ํากว่า มุมสูงสุดคือ 30 องศา

ตั้งค่ามุมมองแบบเป็นโปรแกรมโดยใช้ GMSCameraPosition หรือ GMSCameraUpdate หรือใช้เมธอด GMSMapView เป็น animateToViewingAngle:

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 เพื่อทําให้การซูมขยายขึ้น 1 ระดับจากระดับปัจจุบัน

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. ใช้เมธอด GMSMapView ของ cameraForBounds:insets: เพื่อส่งคืน 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];