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

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

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

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

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

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

Maps SDK สำหรับ iOS ใช้การฉายภาพของ Mercator เพื่อแสดงพื้นผิวโลก (ทรงกลม) บนหน้าจออุปกรณ์ของคุณ (เครื่องบินแบน)

ตำแหน่งของกล้อง

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

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

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

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

ละติจูดอาจแตกต่างกันระหว่าง -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 องศา จุดสนใจระหว่างกล้องและตำแหน่งแผนที่จะปรากฏใหญ่ขึ้นตามสัดส่วน ในขณะที่จุดสนใจที่อยู่นอกตำแหน่งแผนที่จะลดขนาดลงตามสัดส่วน ให้เอฟเฟ็กต์แบบ 3 มิติ

ซูม

ระดับการซูมของกล้องจะเป็นตัวกําหนดขนาดของแผนที่ ที่ระดับการซูมที่ใหญ่ขึ้น จะเห็นรายละเอียดมากขึ้นบนหน้าจอ ในขณะที่ระดับการซูมที่เล็กลงจะสามารถมองเห็นสิ่งต่างๆ ได้บนหน้าจอมากขึ้น เมื่อซูมระดับ 0 ขนาดของแผนที่โลกจะกว้างประมาณ 256 จุด

การเพิ่มระดับการซูม 1 เป็น 2 เท่าของความกว้างของโลกบนหน้าจอ ดังนั้นที่ระดับการซูม 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 คุณจะระบุระยะห่างจากขอบสำหรับแต่ละด้านของกรอบล้อมรอบแยกจากกันได้

ใช้ 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];
      

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

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

มุมมองอาจอยู่ในช่วง 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 เพื่อทำภาพเคลื่อนไหวซูมเข้าไป 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];
      

กำหนดขอบเขต

หากต้องการย้ายกล้องเพื่อให้มองเห็นพื้นที่ทั้งหมดที่สนใจในระดับการซูมที่สูงที่สุดเท่าที่เป็นไปได้ ให้กำหนดขอบเขตสำหรับมุมมองกล้อง ตัวอย่างเช่น หากต้องการแสดงปั๊มน้ำมันทั้งหมดภายในรัศมี 8 กิโลเมตรจากตำแหน่งปัจจุบันของผู้ใช้ ให้ขยับกล้องเพื่อให้ภาพทั้งหมดปรากฏบนหน้าจอ

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