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

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

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

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

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

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

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

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

มุมมองแผนที่จำลองเป็นกล้องที่มองลงมาจากระนาบแบน พร็อพเพอร์ตี้ เป้าหมาย (ตำแหน่งละติจูด/ลองจิจูด), ทิศทาง, การเอียง และการซูมจะกำหนดตำแหน่งของกล้อง (และการแสดงภาพแผนที่)

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

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

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

ละติจูดอาจแตกต่างกันระหว่าง -85 ถึง 85 องศา ค่าที่สูงกว่าหรือต่ำกว่าช่วงนี้จะถูกบีบให้เป็นค่าที่ใกล้เคียงที่สุดในช่วงนี้ ตัวอย่างเช่น การระบุละติจูดเป็น 100 จะตั้งค่าละติจูดเป็น 85 ช่วงลองจิจูดระหว่าง -180 ถึง 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 มิติ

Zoom

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

การเพิ่มระดับการซูม 1 เป็น 2 เท่าของความกว้างของโลกบนหน้าจอ ดังนั้น เมื่อซูมระดับ 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 ไปยังเมธอด 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];
      

ให้ใช้เมธอด 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: เพื่อระบุจำนวนจุดสำหรับเลื่อนกล้องไปในทิศทาง 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];