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

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

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

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

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

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

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

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

มุมมองแผนที่จะจำลองเป็นกล้องที่มองลงมายังระนาบแบน ตำแหน่ง ของกล้อง (และการแสดงผลแผนที่) จะระบุโดยพร็อพเพอร์ตี้ต่อไปนี้ target (ตำแหน่งละติจูด/ลองจิจูด) bearing, tilt และ zoom

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

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

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

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

แบริ่ง (การวางแนว)

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

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

ซูม

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

การเพิ่มระดับการซูมขึ้น 1 ระดับจะเพิ่มความกว้างของโลกบนหน้าจอเป็น 2 เท่า ดังนั้นที่ระดับการซูม N ความกว้างของโลกจะอยู่ที่ประมาณ 256 * 2N พอยต์ เช่น ที่ระดับการซูม 2 ทั่วโลกจะมีความกว้างประมาณ 1024 จุด

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

  • 1: โลก
  • 5: แผ่นดิน/ทวีป
  • 10: เมือง
  • 15: ถนน
  • 20: อาคาร
รูปภาพต่อไปนี้แสดงลักษณะที่ปรากฏของการซูมที่ระดับต่างๆ
ภาพหน้าจอของแผนที่ที่ระดับการซูม 5
แผนที่ที่ระดับการซูม 5
ภาพหน้าจอของแผนที่ที่ระดับการซูม 15
แผนที่ที่ระดับการซูม 15
ภาพหน้าจอของแผนที่ที่ระดับการซูม 20
แผนที่ที่ระดับการซูม 20

ตั้งค่าตำแหน่งเริ่มต้นของกล้อง

ตั้งค่าตำแหน่งกล้องเริ่มต้นโดยใช้ GMSCameraPosition ออบเจ็กต์ ซึ่งช่วยให้คุณตั้งค่าละติจูดและลองจิจูดของเป้าหมายพร้อมกับ bearing, tilt และ zoom ได้

หากต้องการตั้งค่าตำแหน่งกล้องเริ่มต้น ให้สร้างออบเจ็กต์ 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 เพื่อเคลื่อนไหวการเคลื่อนที่ของกล้อง เพื่อจัดกึ่งกลางที่แวนคูเวอร์

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

ตั้งค่า Bearing (การวางแนว)

การวางแนวคือทิศทางเข็มทิศที่วัดเป็นองศาจากทิศเหนือจริงสำหรับ ขอบด้านบนของแผนที่ เช่น ทิศทาง 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 ไมล์จากตำแหน่งปัจจุบันของผู้ใช้ ให้เลื่อนกล้องเพื่อให้ปั๊มน้ำมันทั้งหมดปรากฏบนหน้าจอ

  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 options = GMSMapViewOptions()
options.camera = camera
let mapView = GMSMapView(options: options)
mapView.setMinZoom(10, maxZoom: 15)
      

Objective-C

GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:41.887
                                                       longitude:-87.622
                                                             zoom:12];
GMSMapViewOptions *options = [[GMSMapViewOptions alloc] init];
options.camera = camera;
GMSMapView *mapView = [[GMSMapView alloc] initWithOptions:options];
[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 options2 = GMSMapViewOptions()
options2.camera = camera2
let mapView2 = GMSMapView(options: options2)

// The current zoom, 4, is outside of the range. The zoom will change to 10.
mapView2.setMinZoom(10, maxZoom: 15)
      

Objective-C

// Sets the zoom level to 4.
GMSCameraPosition *camera2 = [GMSCameraPosition cameraWithLatitude:41.887
                                                         longitude:-87.622
                                                              zoom:4];
GMSMapViewOptions *options2 = [[GMSMapViewOptions alloc] init];
options2.camera = camera2;
GMSMapView *mapView2 = [[GMSMapView alloc] initWithOptions:options2];
// The current zoom, 4, is outside of the range. The zoom will change to 10.
[mapView setMinZoom:10 maxZoom:15];