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

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

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

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

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

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

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

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

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

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

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

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

ละติจูดอาจมีค่าระหว่าง -85 ถึง 85 องศา ค่าที่อยู่สูงกว่าหรือต่ำกว่าช่วงนี้จะถูกบีบให้เป็นค่าที่ใกล้เคียงที่สุดภายในช่วงนี้ เช่น การระบุละติจูด 100 จะตั้งค่าไว้ที่ 85 ช่วงลองจิจูดระหว่าง -180 ถึง 180 องศา (รวมค่าแรกและค่าสุดท้าย) ค่าที่อยู่เหนือหรือต่ำกว่าช่วงนี้จะถูกรวมให้อยู่ภายในช่วง (-180, 180) เช่น 480, 840 และ 1200 จะรวมเป็น 120 องศา

ทิศทาง (การวางแนว)

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

เครื่องหมาย 0 หมายความว่าส่วนบนสุดของแผนที่ชี้ไปยังทิศเหนือจริง ค่าทิศทาง 90 หมายถึงด้านบนของจุดบนแผนที่ที่ครบกำหนดในทิศตะวันออก (90 องศาบนเข็มทิศ) ค่า 180 หมายถึงด้านบนของจุดบนแผนที่เนื่องจากอยู่ทางใต้

Maps 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 โลกทั้งใบมีความกว้างประมาณ 1,024 จุด

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

  • 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 init เริ่มต้นได้ด้วย ในกรณีนี้ ตำแหน่งของกล้องจะเริ่มต้นที่ตำแหน่งเริ่มต้นและคุณจะเปลี่ยนหลังการสร้าง

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

โปรดใช้เมธอด 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 เป็นค่าว่าง

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