เมื่อใช้ 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 คือตำแหน่งแผนที่ปัจจุบัน แผนที่ที่ได้จะแสดงอยู่ใต้แผนที่
ในภาพด้านล่าง มุมการดูคือ 45 องศา สังเกตเห็นว่ากล้องจะเคลื่อนครึ่งทางไปตามส่วนโค้งระหว่างแนวตรงจากมุมสูง (0 องศา) กับพื้น (90 องศา) เพื่อจัดตำแหน่ง 3 กล้องจะยังคงเล็งไปที่จุดศูนย์กลางของแผนที่ แต่จะเห็นพื้นที่ที่แสดงโดยเส้นที่ตำแหน่ง 4 แล้ว
แผนที่ในภาพหน้าจอนี้ยังคงอยู่ ณ จุดศูนย์กลางของจุดเดียวกับในแผนที่เดิม แต่มีคุณลักษณะอื่นๆ ปรากฏขึ้นที่ด้านบนของแผนที่ เมื่อคุณเพิ่มมุมขึ้นจนเกิน 45 องศา จุดสนใจระหว่างกล้องและตำแหน่งแผนที่จะปรากฏตามสัดส่วน ในขณะที่สถานที่อื่นๆ นอกเหนือตำแหน่งของแผนที่จะแสดงที่มีขนาดเล็กลงตามสัดส่วน ให้ความรู้สึกแบบ 3 มิติ
Zoom
ระดับการซูมของกล้องจะเป็นตัวกำหนดขนาดของแผนที่ ในระดับการซูมที่ใหญ่ขึ้น คุณจะเห็นรายละเอียดมากขึ้นบนหน้าจอ ในขณะที่ระดับการซูมที่เล็กลงจะสามารถมองเห็นสิ่งต่างๆ ในโลกได้มากขึ้น ที่ระดับการซูม 0 ขนาดของแผนที่จะเหมือนกับที่โลกมีความกว้างประมาณ 256 จุด
การเพิ่มระดับการซูม 1 เป็น 2 เท่าของความกว้างของโลกบนหน้าจอ ดังนั้น เมื่อซูมระดับ N ความกว้างโลกจะอยู่ที่ประมาณ 256 * 2N จุด ตัวอย่างเช่น เมื่อซูมระดับ 2 โลกทั้งโลกจะมีความกว้างประมาณ 1024 จุด
ระดับการซูมไม่จำเป็นต้องเป็นจำนวนเต็ม ช่วงของระดับการซูมที่แผนที่อนุญาตจะขึ้นอยู่กับหลายปัจจัย ได้แก่ เป้าหมาย ประเภทแผนที่ และขนาดหน้าจอ ตัวเลขที่อยู่นอกช่วงจะถูกแปลงเป็นค่าที่ถูกต้องลำดับถัดไป ซึ่งอาจเป็นระดับการซูมขั้นต่ำหรือระดับการซูมสูงสุดก็ได้ ระดับความละเอียดโดยประมาณที่คุณคาดว่าจะเห็นในแต่ละระดับการซูมมีดังนี้
- 1: โลก
- 5: ผืนดินขนาดใหญ่/ทวีป
- 10: เมือง
- 15: ถนน
- 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 กิโลเมตรจากตำแหน่งปัจจุบันของผู้ใช้ ให้ย้ายกล้องไปให้เห็นชัดเจนทั้งหมดบนหน้าจอ
- คำนวณ
GMSCoordinateBounds
ที่คุณต้องการให้แสดงบนหน้าจอ - ใช้เมธอด
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];