Máy ảnh và chế độ xem

Chọn nền tảng: Android iOS JavaScript

Với SDK Maps dành cho iOS, bạn có thể thay đổi điểm nhìn của người dùng trên bản đồ bằng cách thay đổi máy ảnh của bản đồ.

Với SDK Maps dành cho iOS, người dùng có thể nghiêng và xoay bản đồ để điều chỉnh bản đồ theo hướng hữu ích cho ngữ cảnh của họ. Ở bất kỳ mức thu phóng nào, người dùng có thể xoay bản đồ hoặc thay đổi góc nhìn của bản đồ với độ trễ rất ít.

Các thay đổi đối với máy ảnh sẽ không làm thay đổi điểm đánh dấu, hình nhiều đường hoặc đồ hoạ khác mà bạn đã thêm, mặc dù bạn có thể thay đổi những thành phần bổ sung này cho phù hợp hơn với khung hiển thị mới.

Chế độ xem của bản đồ

SDK Maps dành cho iOS sử dụng Phép chiếu Mercator để biểu thị bề mặt thế giới (hình cầu) trên màn hình thiết bị của bạn (một mặt phẳng).

Vị trí máy ảnh

Chế độ xem bản đồ được mô hình hoá như một máy ảnh nhìn xuống trên một mặt phẳng phẳng. Vị trí của máy ảnh (và do đó việc hiển thị của bản đồ) được chỉ định bởi các thuộc tính sau: mục tiêu (vĩ độ/kinh độ của vị trí), góc trục, nghiêngthu phóng.

Sơ đồ thuộc tính của máy ảnh

Mục tiêu (vị trí)

Mục tiêu của máy ảnh là vị trí của trung tâm bản đồ, được xác định dưới dạng toạ độ theo vĩ độ và kinh độ.

Vĩ độ có thể nằm trong khoảng từ -85 đến 85 độ. Các giá trị trên hoặc dưới phạm vi này sẽ được gắn với giá trị gần nhất trong phạm vi này. Ví dụ: việc chỉ định vĩ độ là 100 sẽ đặt giá trị thành 85. Kinh độ nằm trong khoảng từ -180 đến 180 độ. Các giá trị trên hoặc dưới phạm vi này sẽ được gói sao cho nằm trong phạm vi (-180, 180). Ví dụ: 480, 840 và 1200 đều sẽ được gói thành 120 độ.

Góc phương vị (hướng)

Góc phương tiện máy ảnh chỉ định hướng la bàn, được đo bằng độ từ phía bắc thực, tương ứng với cạnh trên cùng của bản đồ. Nếu bạn vẽ một đường dọc từ tâm bản đồ đến cạnh trên cùng của bản đồ, góc phương vị sẽ tương ứng với hướng của máy ảnh (được đo bằng độ) so với hướng bắc thực.

Góc phương vị bằng 0 có nghĩa là đỉnh của bản đồ trỏ về hướng Bắc thực. Giá trị góc phương vị 90 có nghĩa là điểm trên bản đồ đến hạn về phía đông (90 độ trên la bàn). Giá trị 180 có nghĩa là điểm cao nhất của các điểm trên bản đồ nằm ở phía nam.

API Maps cho phép bạn thay đổi phương hướng của bản đồ. Ví dụ: một người lái xe ô tô thường quay bản đồ đường để căn chỉnh cho phù hợp với hướng đi của họ, trong khi người đi bộ đường dài sử dụng bản đồ và la bàn thường định hướng bản đồ để một đường thẳng đứng chỉ về phía Bắc.

Nghiêng (góc xem)

Độ nghiêng xác định vị trí của máy ảnh trên một vòng cung ngay trên vị trí trung tâm của bản đồ, được đo bằng độ tính từ điểm thấp nhất (hướng trỏ ngay bên dưới máy ảnh). Giá trị 0 tương ứng với máy ảnh được đặt thẳng xuống. Các giá trị lớn hơn 0 tương ứng với máy ảnh được đặt hướng về phía đường chân trời theo số độ được chỉ định. Khi bạn thay đổi góc xem, bản đồ sẽ xuất hiện dưới dạng phối cảnh, với các đối tượng ở xa xuất hiện nhỏ hơn và các đối tượng ở gần hiển thị lớn hơn. Các hình minh hoạ sau đây minh hoạ điều này.

Trong các hình ảnh bên dưới, góc xem là 0 độ. Hình ảnh đầu tiên cho thấy sơ đồ minh hoạ; vị trí 1 là vị trí máy ảnh và vị trí 2 là vị trí hiện tại trên bản đồ. Bản đồ thu được sẽ hiển thị bên dưới.

Ảnh chụp màn hình bản đồ với máy ảnh được đặt ở góc xem 0 độ, ở mức thu phóng 18 độ.
Bản đồ sẽ hiển thị với góc nhìn mặc định của camera.
Sơ đồ cho thấy vị trí mặc định của máy ảnh, ngay trên vị trí trên bản đồ, ở góc 0 độ.
Góc xem mặc định của máy ảnh.

Trong các hình ảnh bên dưới, góc xem là 45 độ. Lưu ý rằng máy ảnh di chuyển một nửa theo một vòng cung giữa khoảng không thẳng (0 độ) và mặt đất (90 độ) để đến vị trí 3. Máy ảnh vẫn đang trỏ vào điểm trung tâm của bản đồ, nhưng khu vực được biểu thị bằng đường ở vị trí 4 hiện đã hiển thị.

Ảnh chụp màn hình bản đồ với máy ảnh được đặt ở góc xem 45 độ, ở mức thu phóng 18 độ.
Bản đồ hiển thị với góc xem là 45 độ.
Sơ đồ cho thấy góc nhìn của camera được đặt thành 45 độ, với mức thu phóng vẫn được đặt là 18.
Góc xem của camera là 45 độ.

Bản đồ trong ảnh chụp màn hình này vẫn được căn giữa trên cùng một điểm như trong bản đồ gốc, nhưng các đối tượng khác đã xuất hiện ở phía trên cùng của bản đồ. Khi bạn tăng góc vượt quá 45 độ, các đối tượng giữa máy ảnh và vị trí bản đồ xuất hiện lớn hơn tương ứng, trong khi các đối tượng nằm ngoài vị trí bản đồ sẽ xuất hiện nhỏ hơn theo tỷ lệ, tạo ra hiệu ứng ba chiều.

Zoom (thu phóng)

Mức thu phóng của máy ảnh sẽ xác định tỷ lệ của bản đồ. Ở mức thu phóng lớn hơn, người dùng có thể nhìn thấy nhiều chi tiết hơn trên màn hình, trong khi ở mức thu phóng nhỏ hơn, nhiều người có thể nhìn thấy nhiều thế giới hơn trên màn hình. Ở mức thu phóng 0, tỷ lệ của bản đồ là toàn bộ thế giới có chiều rộng xấp xỉ 256 điểm.

Tăng mức thu phóng thêm 1 sẽ nhân đôi chiều rộng của thế giới trên màn hình. Do đó, ở mức thu phóng N, chiều rộng của thế giới là khoảng 256 * 2N điểm. Ví dụ: ở mức thu phóng 2, toàn bộ thế giới rộng khoảng 1024 điểm.

Mức thu phóng không cần phải là số nguyên. Phạm vi mức thu phóng mà bản đồ cho phép phụ thuộc vào một số yếu tố như mục tiêu, loại bản đồ và kích thước màn hình. Mọi số nằm ngoài phạm vi sẽ được chuyển đổi thành giá trị hợp lệ gần nhất tiếp theo, có thể là mức thu phóng tối thiểu hoặc mức thu phóng tối đa. Danh sách sau đây cho thấy mức độ chi tiết gần đúng mà bạn có thể thấy ở mỗi mức thu phóng:

  • 1: Thế giới
  • 5: Vùng đất/lục địa
  • 10: Thành phố
  • 15: Đường phố
  • 20: Toà nhà
Các hình ảnh sau đây cho thấy hình ảnh của các mức thu phóng khác nhau:
Ảnh chụp màn hình bản đồ ở mức thu phóng 5
Bản đồ ở mức thu phóng 5.
Ảnh chụp màn hình bản đồ ở mức thu phóng 15
Bản đồ ở mức thu phóng 15.
Ảnh chụp màn hình bản đồ ở mức thu phóng 20
Bản đồ ở mức thu phóng 20.

Đặt vị trí ban đầu của máy ảnh

Đặt vị trí ban đầu của máy ảnh bằng cách sử dụng đối tượng GMSCameraPosition. Nhờ đó, bạn có thể đặt vĩ độ và kinh độ của mục tiêu cùng với chế độ góc, hướng và thu phóng.

Để đặt vị trí máy ảnh ban đầu, hãy tạo đối tượng GMSMapViewOptions và đặt thuộc tính camera thành GMSCameraPosition. Sau đó, hãy chuyển các tuỳ chọn của bạn đến hàm khởi tạo sự tiện lợi 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];

Bạn cũng có thể tạo đối tượng GMSMapView bằng phương thức khởi tạo UIView mặc định. Trong trường hợp này, vị trí của máy ảnh bắt đầu ở vị trí mặc định và bạn sẽ thay đổi vị trí này sau khi tạo.

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

Thay đổi vị trí máy ảnh

Bạn có thể lập trình để thay đổi vị trí của máy ảnh để đặt vị trí, góc xoay, độ nghiêng và thu phóng. Mặc dù GMSMapView cung cấp một số phương thức mà bạn có thể dùng để thay đổi vị trí của máy ảnh, nhưng bạn thường sử dụng GMSCameraPosition hoặc GMSCameraUpdate:

  • GMSCameraPosition chứa các thuộc tính và phương thức bạn dùng để thay đổi mọi tham số vị trí máy ảnh: mục tiêu, phương hướng, độ nghiêng và thu phóng.

  • GMSCameraUpdate cho phép bạn thay đổi mục tiêu, phương hướng, độ nghiêng và thu phóng, đồng thời chứa các phương thức tiện lợi khác để hỗ trợ thao tác cuộn, thu phóng nâng cao, căn giữa máy ảnh trong các ranh giới được xác định trước, v.v.

Khi di chuyển máy ảnh, bạn có thể chọn "gắn" máy ảnh sang vị trí mới, nghĩa là không có ảnh động hay tạo ảnh động cho quá trình di chuyển. Ví dụ: nếu bạn tạo ảnh động cho thay đổi đối với vị trí mục tiêu của máy ảnh, thì ảnh động sẽ dịch chuyển từ vị trí trước đó sang vị trí mới.

Ảnh động nội suy giữa các thuộc tính của máy ảnh hiện tại và các thuộc tính mới của máy ảnh. Bạn có thể kiểm soát thời lượng của ảnh động bằng Ảnh động cốt lõi.

Sử dụng GMSCameraPosition

Để thay đổi máy ảnh bằng GMSCameraPosition, bạn sẽ tạo một đối tượng mới hoặc sao chép một đối tượng hiện có, sau đó đặt đối tượng đó vào đối tượng GMSMapView. Sử dụng đối tượng GMSCameraPosition để chuyển máy ảnh đến vị trí mới có hoặc không có ảnh động.

Sử dụng đối tượng GMSCameraPosition để định cấu hình mọi thuộc tính của máy ảnh như vĩ độ, kinh độ, thu phóng, góc phương vị và góc nhìn. Sau đó, bạn sử dụng đối tượng đó để đặt thuộc tính camera của 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];
      

Bỏ qua mọi thuộc tính GMSCameraPosition mà bạn muốn đặt làm giá trị mặc định.

Để tạo ảnh động cho quá trình di chuyển, hãy sử dụng phương thức animateToCameraPosition: thay vì đặt thuộc tính camera.

Sử dụng GMSCameraUpdate

GMSCameraUpdate cho phép bạn cập nhật vị trí máy ảnh và chọn chụp nhanh hay tạo ảnh động cho vị trí mới đó. Ưu điểm của GMSCameraUpdate là sự tiện lợi. Bạn có thể sử dụng GMSCameraPosition để thực hiện các thao tác tương tự như GMSCameraUpdate, nhưng GMSCameraUpdate cung cấp thêm các phương thức trợ giúp để giúp bạn dễ dàng điều khiển máy ảnh.

Ví dụ: để sử dụng GMSCameraPosition nhằm tăng mức thu phóng hiện tại, trước tiên, bạn phải xác định mức thu phóng hiện tại, sau đó tạo một đối tượng GMSCameraPosition trong đó bạn đặt mức thu phóng thành một giá trị lớn hơn mức thu phóng hiện tại.

Ngoài ra, hãy tạo một đối tượng GMSCameraUpdate bằng phương thức zoomIn:. Sau đó, hãy cập nhật máy ảnh bằng cách truyền đối tượng GMSCameraUpdate vào phương thức 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];
      

Hãy sử dụng phương thức GMSMapView moveCamera: để chuyển máy ảnh sang vị trí mới.

Trong ví dụ tiếp theo, bạn sử dụng GMSCameraUpdate để tạo hiệu ứng chuyển động cho camera nhằm căn giữa 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];
      

Dựng một đối tượng GMSCameraUpdate

Tạo đối tượng GMSCameraUpdate bằng cách sử dụng một trong các phương thức của đối tượng đó.

zoomIn:zoomOut:
Thay đổi mức thu phóng hiện tại thêm 1, 0 mà vẫn giữ nguyên tất cả các thuộc tính khác.
zoomTo:
Thay đổi mức thu phóng thành giá trị đã cho, trong khi vẫn giữ nguyên tất cả các thuộc tính khác.
zoomBy:
Tăng (hoặc giảm nếu giá trị là số âm) mức thu phóng theo giá trị đã cho.
zoomBy:atPoint:
Tăng (hoặc giảm nếu giá trị là số âm) mức thu phóng theo giá trị đã cho, trong khi vẫn giữ nguyên vị trí của điểm đã chỉ định trên màn hình.
setTarget:
Thay đổi vĩ độ và kinh độ của máy ảnh mà vẫn giữ nguyên tất cả các thuộc tính khác.
setTarget:zoom:
Thay đổi vĩ độ, kinh độ và mức thu phóng của máy ảnh mà vẫn giữ nguyên tất cả các thuộc tính khác.
setCamera:
Đặt GMSCameraPosition mới.
scrollByX:Y:
Thay đổi vĩ độ và kinh độ của máy ảnh để di chuyển bản đồ theo số lượng điểm đã chỉ định. Giá trị x dương làm cho máy ảnh di chuyển sang phải, để bản đồ dường như đã di chuyển sang trái. Giá trị y dương làm cho máy ảnh di chuyển xuống, vì vậy bản đồ dường như đã di chuyển lên. Thao tác cuộn tương ứng với góc phương vị hiện tại của máy ảnh. Ví dụ: nếu camera có góc phương hướng 90 độ, thì hướng đông là "hướng lên".
fitBounds:
Chuyển đổi máy ảnh để căn giữa các ranh giới đã chỉ định trên màn hình ở mức thu phóng lớn nhất có thể. Áp dụng khoảng đệm mặc định cho giới hạn 64 điểm.
fitBounds:withPadding:
Chuyển đổi máy ảnh để căn giữa các giới hạn đã chỉ định trên màn hình ở mức thu phóng lớn nhất có thể. Hãy sử dụng phương thức này để chỉ định cùng một khoảng đệm, theo điểm, cho mọi cạnh của hộp giới hạn.
fitBounds:withEdgeInsets:
Chuyển đổi máy ảnh để căn giữa các giới hạn đã chỉ định trên màn hình ở mức thu phóng lớn nhất có thể. Với UIEdgeInsets, bạn chỉ định khoảng đệm cho mỗi bên của hộp giới hạn một cách độc lập.

Sử dụng GMSMapView để thay đổi một thuộc tính

GMSMapView cung cấp một số phương thức cho phép bạn di chuyển máy ảnh mà không cần sử dụng đối tượng GMSCameraPosition hoặc đối tượng GMSCameraUpdate. Với các phương thức này, chẳng hạn như animateToLocation: hoặc animateToZoom:, bạn có thể tạo ảnh động cho thay đổi đối với một thuộc tính máy ảnh.

Ví dụ: sử dụng phương thức toViewingAngle: để tạo ảnh động cho thay đổi đối với máy ảnh nghiêng.

Swift

mapView.animate(toViewingAngle: 45)
      

Objective-C

[mapView animateToViewingAngle:45];
      

Đặt mục tiêu (vị trí)

Vị trí xác định trung tâm của bản đồ. Các vị trí được chỉ định theo vĩ độ và kinh độ, đồng thời được biểu thị theo phương thức lập trình bằng CLLocationCoordinate2D, được tạo bằng CLLocationCoordinate2DMake.

Sử dụng GMSCameraPosition để thay đổi vị trí. Trong ví dụ này, bản đồ sẽ điều chỉnh theo vị trí mới.

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

Để tạo ảnh động cho thay đổi và xoay bản đồ đến vị trí mới, bạn có thể sử dụng phương thức animateToCameraPosition: thay vì đặt thuộc tính camera. Hoặc sử dụng phương thức animateToLocation: trên GMSMapView.

Swift

mapView.animate(toLocation: CLLocationCoordinate2D(latitude: -33.868, longitude: 151.208))
      

Objective-C

[mapView animateToLocation:CLLocationCoordinate2DMake(-33.868, 151.208)];
      

Bạn cũng có thể tạo một đối tượng GMSCameraUpdate để di chuyển camera. Sử dụng phương thức tích hợp sẵn scrollByX:Y: để chỉ định số điểm cần cuộn camera theo hướng X và Y. Trong ví dụ này, bạn cuộn máy ảnh 200 điểm sang phải và 100 điểm xuống dưới:

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

Đặt góc phương vị (hướng)

Góc phương diện là hướng la bàn, được đo bằng độ so với hướng bắc thực, cho cạnh trên cùng của bản đồ. Ví dụ: góc 90 độ sẽ dẫn đến bản đồ nơi cạnh trên cùng hướng về phía đông.

Đặt góc phương vị theo phương thức lập trình bằng GMSCameraPosition hoặc GMSCameraUpdate hoặc bằng phương thức animateToBearing: của GMSMapView.

Swift

mapView.animate(toBearing: 0)
      

Objective-C

[mapView animateToBearing:0];
      

Đặt độ nghiêng (góc xem)

Góc xem là vị trí của máy ảnh trên một cung giữa trực tiếp vị trí tâm của bản đồ và bề mặt của Trái đất, được đo bằng độ từ điểm thấp nhất (hướng chỉ ngay bên dưới máy ảnh). Khi bạn thay đổi góc xem, bản đồ sẽ xuất hiện dưới dạng phối cảnh, trong đó các đối tượng giữa máy ảnh và vị trí bản đồ xuất hiện lớn hơn tương ứng, còn các đối tượng nằm ngoài vị trí bản đồ xuất hiện nhỏ hơn một cách tương đối, tạo ra hiệu ứng ba chiều.

Góc xem có thể nằm trong khoảng từ 0 (trỏ thẳng xuống bản đồ) và lên đến mức tối đa phụ thuộc mức thu phóng. Đối với mức thu phóng 16 trở lên, góc tối đa là 65 độ. Đối với mức thu phóng từ 10 trở xuống, góc tối đa là 30 độ.

Đặt góc xem theo phương thức lập trình bằng cách sử dụng GMSCameraPosition hoặc GMSCameraUpdate hoặc phương thức animateToViewingAngle: của GMSMapView.

Swift

mapView.animate(toViewingAngle: 45)
      

Objective-C

[mapView animateToViewingAngle:45];
      

Đặt mức thu phóng

Mức thu phóng của máy ảnh sẽ xác định tỷ lệ của bản đồ. Ở mức thu phóng lớn hơn, bạn có thể nhìn thấy nhiều chi tiết hơn trên màn hình, trong khi ở mức thu phóng nhỏ hơn, bạn có thể nhìn thấy nhiều chi tiết hơn về thế giới.

Đặt mức thu phóng theo phương thức lập trình bằng GMSCameraPosition hoặc GMSCameraUpdate hoặc bằng phương thức animateToZoom: của GMSMapView.

Swift

mapView.animate(toZoom: 12)
      

Objective-C

[mapView animateToZoom:12];
      

Ví dụ sau đây sử dụng phương thức zoomIn: để tạo đối tượng GMSCameraUpdate nhằm tạo ảnh động phóng to một cấp so với cấp hiện tại.

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

Đặt ranh giới

Để di chuyển camera sao cho toàn bộ khu vực quan tâm có thể hiển thị ở mức thu phóng lớn nhất có thể, hãy đặt ranh giới cho khung hiển thị camera. Ví dụ: nếu bạn muốn hiển thị tất cả các trạm xăng trong vòng 5 dặm tính từ vị trí hiện tại của người dùng, hãy di chuyển camera để tất cả đều hiển thị trên màn hình:

  1. Tính toán GMSCoordinateBounds mà bạn muốn hiện trên màn hình.
  2. Sử dụng phương thức cameraForBounds:insets: của GMSMapView để trả về một GMSCameraPosition mới.

Việc đặt các giới hạn này đảm bảo GMSCoordinateBounds đã cho hoàn toàn phù hợp với kích thước của bản đồ hiện tại. Lưu ý rằng phương thức này sẽ đặt độ nghiêng và góc phương vị của bản đồ thành 0.

Ví dụ sau minh hoạ cách thay đổi máy ảnh để các thành phố Vancouver và Calgary đều xuất hiện trong cùng một chế độ xem.

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;
      

Hạn chế xoay người dùng đến một vùng nhất định

Các trường hợp này đặt ranh giới của bản đồ nhưng sau đó người dùng có thể cuộn hoặc xoay bên ngoài các ranh giới này. Thay vào đó, bạn nên ràng buộc các ranh giới tâm toạ độ của tiêu điểm bản đồ (mục tiêu máy ảnh) để người dùng chỉ có thể cuộn và xoay trong những giới hạn này.

Ví dụ: một ứng dụng bán lẻ cho trung tâm mua sắm hoặc sân bay có thể muốn ràng buộc bản đồ trong các giới hạn cụ thể, cho phép người dùng cuộn và xoay trong các giới hạn đó.

Để hạn chế việc kéo đến các giới hạn cụ thể, hãy đặt thuộc tính cameraTargetBounds của GMSMapView thành đối tượng GMSCoordinateBounds xác định các giới hạn bắt buộc. Để sau đó loại bỏ hạn chế này, hãy đặt cameraTargetBounds thành nil.

Swift

mapView.cameraTargetBounds = bounds
      

Objective-C

mapView.cameraTargetBounds = bounds;
      

Sơ đồ dưới đây minh hoạ một trường hợp máy ảnh mục tiêu bị hạn chế ở một khu vực lớn hơn khung nhìn một chút. Người dùng có thể cuộn và kéo, miễn là mục tiêu của máy ảnh vẫn nằm trong khu vực bị giới hạn. Chữ thập biểu thị mục tiêu máy ảnh:

Sơ đồ cho thấy ranh giới của máy ảnh lớn hơn khung nhìn.

Bản đồ luôn lấp đầy khung nhìn, ngay cả khi khung nhìn hiển thị các khu vực nằm ngoài ranh giới đã xác định. Ví dụ: nếu bạn đặt mục tiêu máy ảnh ở một góc của khu vực bị giới hạn, thì khu vực bên ngoài góc sẽ hiển thị trong khung nhìn nhưng người dùng không thể cuộn thêm vào khu vực đó. Sơ đồ sau đây minh hoạ trường hợp này. Hình chữ thập biểu thị mục tiêu máy ảnh:

Sơ đồ cho thấy mục tiêu máy ảnh được đặt ở góc dưới cùng bên phải của ranh giới máy ảnh.

Trong sơ đồ dưới đây, mục tiêu máy ảnh có rất ít giới hạn, khiến người dùng có rất ít cơ hội để cuộn hoặc xoay bản đồ. Hình chữ thập biểu thị mục tiêu máy ảnh:

Sơ đồ cho thấy ranh giới của máy ảnh nhỏ hơn khung nhìn.

Đặt mức thu phóng tối thiểu hoặc tối đa

Các hằng số toàn cục kGMSMinZoomLevelkGMSMaxZoomLevel xác định giá trị thu phóng tối thiểu hoặc tối đa. Theo mặc định, các thuộc tính minZoommaxZoom của GMSMapView được đặt thành các hằng số này.

Để hạn chế phạm vi mức thu phóng có sẵn cho bản đồ, hãy đặt mức thu phóng tối thiểu và tối đa. Mã sau đây giới hạn mức thu phóng trong khoảng từ 10 đến 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];
      

Bạn phải đặt phạm vi thu phóng bằng phương thức setMinZoom:maxZoom:; tuy nhiên, bạn có thể đọc các giá trị hiện tại bằng cách sử dụng thuộc tính minZoommaxZoom. Phương pháp này hữu ích khi chỉ hạn chế một trong các giá trị. Mã sau đây chỉ thay đổi mức thu phóng tối thiểu.

Swift

mapView.setMinZoom(12, maxZoom: mapView.maxZoom)
      

Objective-C

[mapView setMinZoom:12 maxZoom:mapView.maxZoom];
      

Nếu sau khi cập nhật mức thu phóng tối thiểu và tối đa, mức thu phóng của máy ảnh được đặt thành giá trị bên ngoài phạm vi mới, mức thu phóng hiện tại sẽ tự động cập nhật để hiển thị giá trị hợp lệ gần nhất. Ví dụ: trong mã sau đây, mức thu phóng ban đầu được định nghĩa là 4. Khi sau đó phạm vi thu phóng được đặt thành 10-15, mức thu phóng hiện tại sẽ được cập nhật thành 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];