Maps SDK สําหรับ iOS ช่วยให้คุณเปลี่ยนมุมมองแผนที่ของผู้ใช้ได้ด้วยการเปลี่ยนกล้องของแผนที่
เมื่อใช้ Maps SDK สำหรับ iOS ผู้ใช้จะเอียงและบิดแผนที่เพื่อปรับให้อยู่ในแนวที่เป็นประโยชน์สำหรับบริบทของตนได้ ผู้ใช้สามารถเลื่อนแผนที่หรือเปลี่ยนมุมมองได้โดยแทบไม่มีเวลาในการตอบสนอง
การเปลี่ยนแปลงกล้องจะไม่เปลี่ยนเครื่องหมาย เส้นประกอบ หรือกราฟิกอื่นๆ ที่คุณเพิ่ม แม้ว่าคุณอาจต้องการเปลี่ยนสิ่งที่เพิ่มเหล่านี้ให้เข้ากับมุมมองใหม่มากขึ้น
มุมมองของแผนที่
Maps SDK สำหรับ iOS ใช้การฉายภาพแบบเมอเรเตอร์เพื่อแสดงพื้นผิวโลก (ทรงกลม) บนหน้าจอของอุปกรณ์ (ระนาบแบน)
ตำแหน่งกล้อง
มุมมองแผนที่จะจำลองเป็นกล้องที่มองลงมาบนพื้นผิวเรียบ ตำแหน่งของกล้อง (และการแสดงผลแผนที่) จะระบุด้วยพร็อพเพอร์ตี้ต่อไปนี้ target (location latitude/longitude), bearing, tilt และ zoom
เป้าหมาย (สถานที่ตั้ง)
เป้าหมายของกล้องคือตำแหน่งของศูนย์กลางแผนที่ ซึ่งระบุเป็นพิกัดละติจูดและลองจิจูด
ละติจูดต้องอยู่ระหว่าง -85 ถึง 85 องศา ค่าที่สูงกว่าหรือต่ำกว่าช่วงนี้จะถูกบีบให้อยู่ภายในค่าที่ใกล้เคียงที่สุดภายในช่วงนี้ เช่น การระบุละติจูด 100 จะตั้งค่าเป็น 85 ลองจิจูดอยู่ในช่วง -180 ถึง 180 องศา ค่าที่สูงกว่าหรือต่ำกว่าช่วงนี้จะได้รับการปัดให้อยู่ในช่วง (-180, 180) เช่น 480, 840 และ 1200 จะปัดเศษเป็น 120 องศาทั้งหมดทิศทาง (การวางแนว)
ทิศทางของกล้องจะระบุทิศทางของเข็มทิศ ซึ่งวัดเป็นองศาจากทิศเหนือจริง ซึ่งสอดคล้องกับขอบด้านบนของแผนที่ หากคุณลากเส้นแนวตั้งจากตรงกลางแผนที่ไปยังขอบด้านบนของแผนที่ ทิศทางจะสอดคล้องกับทิศทางของกล้อง (วัดเป็นองศา) สัมพันธ์กับทิศเหนือจริง
ทิศทาง 0 หมายความว่าด้านบนของแผนที่ชี้ไปยังทิศเหนือจริง ค่าการบอกทิศทาง 90 หมายถึงจุดบนสุดของแผนที่ชี้ไปทางทิศตะวันออก (90 องศาบนเข็มทิศ) ค่า 180 หมายความว่าด้านบนของแผนที่ชี้ไปทางทิศใต้
Maps API ช่วยให้คุณเปลี่ยนทิศทางของแผนที่ได้ ตัวอย่างเช่น ผู้ที่ขับรถมักจะหมุนแผนที่ถนนให้สอดคล้องกับทิศทางการเดินทาง ส่วนผู้เดินป่าที่ใช้แผนที่และเข็มทิศมักจะปรับแนวแผนที่เพื่อให้เส้นแนวตั้งชี้ไปทางทิศเหนือ
การเอียง (มุมมองในการดู)
การเอียงจะกำหนดตำแหน่งของกล้องบนส่วนโค้งเหนือตำแหน่งกึ่งกลางของแผนที่โดยตรง โดยวัดเป็นองศาจากจุดนัยน์ตา (ทิศทางที่ชี้อยู่ใต้กล้องโดยตรง) ค่า 0 สอดคล้องกับกล้องที่ชี้ลง ค่าที่มากกว่า 0 สอดคล้องกับกล้องที่เอียงไปยังขอบฟ้าตามจำนวนองศาที่ระบุ เมื่อเปลี่ยนมุมมอง แผนที่จะปรากฏในมุมมองภาพ 3 มิติ โดยองค์ประกอบที่อยู่ไกลจะปรากฏเล็กลง ส่วนองค์ประกอบที่อยู่ใกล้จะปรากฏใหญ่ขึ้น ภาพต่อไปนี้แสดงกรณีนี้
ในรูปภาพด้านล่าง มุมมองคือ 0 องศา รูปภาพแรกแสดงภาพแผนภาพคร่าวๆ ของเรื่องนี้ โดยตำแหน่ง 1 คือตำแหน่งของกล้อง และตำแหน่ง 2 คือตำแหน่งแผนที่ปัจจุบัน แผนที่ที่แสดงผลจะแสดงอยู่ด้านล่าง
ในรูปภาพด้านล่าง มุมมองคือ 45 องศา สังเกตว่ากล้องขยับไปครึ่งทางตามส่วนโค้งระหว่างเหนือศีรษะ (0 องศา) กับพื้น (90 องศา) ไปยังตำแหน่ง 3 กล้องยังคงเล็งไปที่จุดศูนย์กลางของแผนที่ แต่ตอนนี้คุณจะเห็นพื้นที่ที่แสดงด้วยเส้นในตำแหน่ง 4
แผนที่ในภาพหน้าจอนี้ยังคงอยู่ตรงกลางจุดเดียวกับในแผนที่เดิม แต่มีฟีเจอร์อื่นๆ ปรากฏขึ้นที่ด้านบนของแผนที่ เมื่อคุณเพิ่มมุมเกิน 45 องศา องค์ประกอบระหว่างกล้องถ่ายรูปและตำแหน่งแผนที่จะปรากฏใหญ่ขึ้นตามสัดส่วน ส่วนองค์ประกอบที่อยู่นอกตำแหน่งแผนที่จะปรากฏเล็กลงตามสัดส่วน ซึ่งจะให้ผลเป็นภาพ 3 มิติ
ซูม
ระดับการซูมของกล้องจะเป็นตัวกำหนดมาตราส่วนของแผนที่ เมื่อซูมระดับสูงขึ้น จะเห็นรายละเอียดมากขึ้นบนหน้าจอ ขณะที่การซูมระดับต่ำลงจะทำให้เห็นพื้นที่บนโลกมากขึ้นบนหน้าจอ เมื่อซูมระดับ 0 มาตราส่วนแผนที่จะแสดงโลกทั้งใบที่มีความกว้างประมาณ 256 จุด
การเพิ่มระดับการซูมขึ้น 1 ระดับจะเพิ่มความกว้างของโลกบนหน้าจอเป็น 2 เท่า ดังนั้นเมื่อซูมระดับ N ความกว้างของโลกจะอยู่ที่ประมาณ 256 * 2N จุด เช่น เมื่อซูมระดับ 2 โลกทั้งใบจะกว้างประมาณ 1,024 จุด
ระดับการซูมไม่จำเป็นต้องเป็นจำนวนเต็ม ระดับการซูมที่แผนที่อนุญาตจะขึ้นอยู่กับหลายปัจจัย เช่น เป้าหมาย ประเภทแผนที่ และขนาดหน้าจอ ระบบจะแปลงตัวเลขที่อยู่นอกช่วงเป็นค่าที่ถูกต้องถัดไปซึ่งอาจเป็นระดับการซูมต่ำสุดหรือระดับการซูมสูงสุด ระดับความละเอียดโดยประมาณที่คุณคาดว่าจะเห็นในแต่ละระดับการซูมมีดังนี้
- 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
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
ให้คุณเปลี่ยนเป้าหมาย ทิศทาง การเอียง และการซูม รวมถึงมีวิธีการเพิ่มเติมที่สะดวกเพื่อรองรับการเลื่อน การซูมขั้นสูง การจัดกล้องให้อยู่ตรงกลางภายในขอบเขตที่กำหนดไว้ล่วงหน้า และอื่นๆ
เมื่อย้ายกล้อง คุณสามารถเลือก "จัดตำแหน่ง" กล้องไปยังตำแหน่งใหม่ ซึ่งหมายความว่าจะไม่มีภาพเคลื่อนไหว หรือจะใส่ภาพเคลื่อนไหวในการย้ายก็ได้ ตัวอย่างเช่น หากคุณแสดงภาพเคลื่อนไหวการเปลี่ยนแปลงตำแหน่งเป้าหมายของกล้อง ภาพเคลื่อนไหวจะเลื่อนจากตำแหน่งก่อนหน้าไปยังตำแหน่งใหม่
ภาพเคลื่อนไหวจะแสดงค่าระหว่างแอตทริบิวต์กล้องปัจจุบันกับแอตทริบิวต์กล้องใหม่ คุณควบคุมระยะเวลาของภาพเคลื่อนไหวได้โดยใช้ Core Animation
ใช้ 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
ที่คุณตั้งค่าการซูมเป็นค่าที่มากกว่าการซูมปัจจุบัน 1 ระดับ
หรือจะสร้างออบเจ็กต์ 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
เพื่อแสดงภาพเคลื่อนไหวของกล้องเพื่อจัดให้ Vancouver อยู่ตรงกลาง
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];
ตั้งค่าการเอียง (มุมมอง)
มุมมองคือตำแหน่งของกล้องบนส่วนโค้งระหว่างตำแหน่งตรงกลางของแผนที่กับพื้นผิวโลก ซึ่งวัดเป็นองศาจากจุดนิวเคลียส (ทิศทางที่ชี้อยู่ใต้กล้องโดยตรง) เมื่อเปลี่ยนมุมมอง แผนที่จะปรากฏในมุมมองภาพ ฟีเจอร์ต่างๆ ระหว่างกล้องกับตำแหน่งแผนที่จะปรากฏใหญ่ขึ้นตามสัดส่วน ส่วนฟีเจอร์ที่อยู่นอกตำแหน่งแผนที่จะปรากฏเล็กลงตามสัดส่วน ทำให้เกิดเอฟเฟกต์สามมิติ
มุมมองอยู่ในช่วง 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];
กำหนดขอบเขต
หากต้องการย้ายกล้องเพื่อให้เห็นพื้นที่ทั้งหมดที่ต้องการดูในระดับการซูมสูงสุด ให้กำหนดขอบเขตของมุมมองกล้อง ตัวอย่างเช่น หากต้องการแสดงปั๊มน้ำมันทั้งหมดที่อยู่ภายในระยะ 5 ไมล์จากตำแหน่งปัจจุบันของผู้ใช้ ให้ย้ายกล้องเพื่อให้ปั๊มน้ำมันทั้งหมดปรากฏบนหน้าจอ
- คํานวณ
GMSCoordinateBounds
ที่ต้องการให้แสดงบนหน้าจอ - ใช้เมธอด
cameraForBounds:insets:
ของGMSMapView
เพื่อแสดงGMSCameraPosition
ใหม่
การตั้งค่าขอบเขตเหล่านี้ช่วยให้มั่นใจได้ว่า GMSCoordinateBounds
ที่ระบุจะพอดีกับขนาดของแผนที่ปัจจุบันโดยสมบูรณ์ โปรดทราบว่าวิธีการนี้จะตั้งค่าการเอียงและการทรงตัวของแผนที่เป็น 0
ตัวอย่างต่อไปนี้แสดงวิธีเปลี่ยนกล้องเพื่อให้เมืองแวนคูเวอร์และคัลgary ปรากฏในมุมมองเดียวกัน
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
เป็น 0
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];