Với SDK Bản đồ 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 camera của bản đồ.
Với SDK Bản đồ 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ỳ cấp độ thu phóng nào, người dùng có thể kéo bản đồ hoặc thay đổi phối cảnh của bản đồ với độ trễ rất thấp.
Các thay đổi đối với máy ảnh sẽ không thay đổi các điểm đánh dấu, đường đa tuyến hoặc các hình ảnh đồ hoạ khác mà bạn đã thêm, mặc dù bạn có thể muốn thay đổi các nội dung bổ sung này để phù hợp hơn với chế độ xem mới.
Chế độ xem của bản đồ
SDK Maps cho iOS sử dụng thực chiếu Mercator để thể hiện bề mặt của trái đất (một hình cầu) trên màn hình của thiết bị (một mặt phẳng).
Vị trí máy ảnh
Chế độ xem bản đồ được mô phỏng như một máy ảnh nhìn xuống mặt phẳng. Vị trí của máy ảnh (và do đó là việc kết xuất bản đồ) được xác định bằng các thuộc tính sau: mục tiêu (vĩ độ/kinh độ của địa điểm), độ lệch, độ nghiêng và tỷ lệ thu phóng.
Mục tiêu (vị trí)
Mục tiêu của máy ảnh là vị trí của tâm bản đồ, được chỉ định dưới dạng tọa độ 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 cố định thành giá trị gần nhất trong phạm vi này. Ví dụ: việc chỉ định vĩ độ 100 sẽ đặt giá trị thành 85. Kinh độ nằm trong khoảng từ -180 đến 180 độ. Các giá trị cao hơn hoặc thấp hơn 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)
Độ lệch của máy ảnh chỉ định hướng la bàn, được đo bằng độ từ hướng 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ừ trung tâm bản đồ đến cạnh trên cùng của bản đồ, thì 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.
Giá trị phương vị 0 có nghĩa là đầu bản đồ chỉ về hướng bắc thực. Giá trị góc phương vị 90 có nghĩa là đầu bản đồ chỉ về hướng đông (90 độ trên la bàn). Giá trị 180 có nghĩa là đầu bản đồ chỉ về phía nam.
API Maps cho phép bạn thay đổi hướng của bản đồ. Ví dụ: người lái xe thường xoay bản đồ đường để căn chỉnh với hướng di chuyển 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 đồ sao cho đường dọc chỉ về hướng bắc.
Nghiêng (góc nhìn)
Độ nghiêng xác định vị trí của máy ảnh trên một vòng cung ngay phía trên vị trí trung tâm của bản đồ, được đo bằng độ từ nadir (hướng chỉ thẳng xuống dưới máy ảnh). Giá trị 0 tương ứng với máy ảnh hướng thẳng xuống. Các giá trị lớn hơn 0 tương ứng với một máy ảnh được hướng về chân trời theo số độ được chỉ định. Khi bạn thay đổi góc nhìn, bản đồ sẽ xuất hiện theo phối cảnh, với các đối tượng ở xa sẽ xuất hiện nhỏ hơn và các đối tượng ở gần sẽ xuất hiện 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 nhìn là 0 độ. Hình ảnh đầu tiên cho thấy sơ đồ của điều này; vị trí 1 là vị trí máy ảnh và vị trí 2 là vị trí bản đồ hiện tại. Bản đồ thu được sẽ xuất hiện bên dưới.
Trong hình ảnh bên dưới, góc nhìn là 45 độ. Lưu ý rằng máy ảnh di chuyển một nửa dọc theo một vòng cung giữa hướng thẳng lên trên (0 độ) và mặt đất (90 độ) đến vị trí 3. Máy ảnh vẫn đang hướng vào điểm trung tâm của bản đồ, nhưng khu vực được biểu thị bằng đường kẻ ở vị trí 4 hiện đã hiển thị.
Bản đồ trong ảnh chụp màn hình này vẫn được căn giữa ở cùng một điểm như trong bản đồ ban đầu, nhưng có nhiều đối tượng hơn xuất hiện ở đầu bản đồ. Khi bạn tăng góc ngoài 45 độ, các đối tượng giữa máy ảnh và vị trí trên bản đồ sẽ xuất hiện lớn hơn theo tỷ lệ, trong khi các đối tượng ngoài vị trí trên 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 xác định tỷ lệ của bản đồ. Ở các cấp độ thu phóng lớn hơn, bạn có thể thấy nhiều chi tiết hơn trên màn hình, trong khi ở các cấp độ thu phóng nhỏ hơn, bạn có thể thấy nhiều cảnh vật 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 khoảng 256 điểm.
Việc tăng mức thu phóng thêm 1 sẽ làm tăng gấp đôi chiều rộng của thế giới trên màn hình. Do đó, ở cấp độ 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 có chiều rộng khoảng 1024 điểm.
Cấp độ 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ố, bao gồm 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 này 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 biết mức độ chi tiết gần đúng mà bạn có thể thấy ở mỗi cấp độ thu phóng:
- 1: Thế giới
- 5: Lục địa/châu lục
- 10: Thành phố
- 15: Đường phố
- 20: Toà nhà
Đặt vị trí ban đầu của máy ảnh
Đặt vị trí máy ảnh ban đầu bằng đối tượng GMSCameraPosition
. Đối tượng này cho phép bạn đặt vĩ độ và kinh độ của mục tiêu cùng với hướng, độ nghiêng và thu phóng.
Để đặt vị trí ban đầu của máy ảnh, hãy tạo một đối tượng GMSMapViewOptions
và đặt thuộc tính camera
thành GMSCameraPosition
. Sau đó, truyền các tuỳ chọn của bạn đến hàm khởi tạo 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í máy ảnh bắt đầu ở vị trí mặc định và bạn sẽ thay đổi vị trí đó 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í của máy ảnh
Bạn có thể thay đổi vị trí của máy ảnh theo phương thức lập trình để đặt vị trí, hướng, độ 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ể sử dụng để thay đổi vị trí 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 mà bạn sử dụng để thay đổi mọi thông số vị trí máy ảnh: mục tiêu, hướng, độ nghiêng và thu phóng.GMSCameraUpdate
cho phép bạn thay đổi mục tiêu, hướng, độ nghiêng và thu phóng, đồng thời chứa các phương thức thuận tiện khác để hỗ trợ 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 "chụp nhanh" máy ảnh đến vị trí mới, nghĩa là không có ảnh động hoặc tạo ảnh động cho chuyển động. Ví dụ: nếu bạn tạo ảnh động cho một thay đổi đối với vị trí mục tiêu của máy ảnh, thì ảnh động sẽ kéo từ vị trí trước đó sang vị trí mới.
Ảnh động nội suy giữa các thuộc tính máy ảnh hiện tại và các thuộc tính máy ảnh mới. Bạn có thể kiểm soát thời lượng của ảnh động bằng Core Animation.
Sử dụng GMSCameraPosition
Để thay đổi máy ảnh bằng GMSCameraPosition
, bạn tạo một đối tượng mới hoặc sao chép một đối tượng hiện có rồi đặt đối tượng đó trên đối tượng GMSMapView
. Sử dụng đối tượng GMSCameraPosition
để chụp nhanh 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 bất kỳ thuộc tính máy ảnh nào, chẳng hạn như vĩ độ, kinh độ, thu phóng, hướng 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 thành giá trị mặc định.
Để tạo ảnh động cho thao tác 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 hoặc tạo ảnh động đến 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 tác vụ tương tự như GMSCameraUpdate
, nhưng GMSCameraUpdate
cung cấp các phương thức trợ giúp bổ sung để dễ dàng thao tác với máy ảnh hơn.
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
để đặ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];
Thay vào đó, hãy sử dụng phương thức GMSMapView
moveCamera:
để chụp nhanh máy ảnh ở vị trí mới.
Trong ví dụ tiếp theo, bạn sẽ sử dụng GMSCameraUpdate
để tạo ảnh động cho việc di chuyển máy ảnh để đặt máy ảnh ở 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];
Tạo đố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:
vàzoomOut:
- Thay đổi mức thu phóng hiện tại thêm 1,0, trong khi 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 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à âm) mức thu phóng theo giá trị đã cho.
zoomBy:atPoint:
- Tăng (hoặc giảm, nếu giá trị â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, trong khi vẫn giữ nguyên tất cả các thuộc tính khác.
setTarget:zoom:
- Thay đổi vĩ độ, kinh độ và độ thu phóng của máy ảnh, đồng thời 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ố điểm đã chỉ định. Giá trị x dương khiến máy ảnh di chuyển sang phải, do đó bản đồ có vẻ như đã di chuyển sang trái. Giá trị y dương khiến máy ảnh di chuyển xuống, vì vậy bản đồ có vẻ như đã di chuyển lên. Thao tác cuộn tương ứng với hướng hiện tại của máy ảnh. Ví dụ: nếu máy ảnh có góc phương vị là 90 độ, thì hướng đông là "lên".
fitBounds:
- 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ể. Áp dụng khoảng đệm mặc định cho các giới hạn là 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ể. Sử dụng phương thức này để chỉ định cùng một khoảng đệm, tính bằng điểm, cho tất cả các 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 từng cạnh 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 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 một 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 một thay đổi đối với độ nghiêng máy ảnh.
Swift
mapView.animate(toViewingAngle: 45)
Objective-C
[mapView animateToViewingAngle:45];
Đặt mục tiêu (vị trí)
Vị trí xác định tâm của bản đồ. Vị trí được chỉ định bằng 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ẽ tự động căn chỉnh đến 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 sự thay đổi và kéo 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 máy ảnh. 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:
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 hướng (hướng)
Độ lệch là hướng la bàn, được đo bằng độ từ hướng bắc thực, cho cạnh trên cùng của bản đồ. Ví dụ: góc phương vị 90 độ sẽ tạo ra một bản đồ mà cạnh trên cùng chỉ về hướng đông.
Đặt phương hướng 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 nhìn)
Góc nhìn là vị trí của máy ảnh trên một vòng cung giữa vị trí chính giữa của bản đồ và bề mặt Trái Đất, được đo bằng độ từ nadir (hướng chỉ thẳng xuống dưới máy ảnh). Khi bạn thay đổi góc nhìn, bản đồ sẽ xuất hiện theo phối cảnh, với các đối tượng nằm giữa máy ảnh và vị trí bản đồ sẽ xuất hiện lớn hơn theo tỷ lệ và 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.
Góc nhìn có thể nằm trong khoảng từ 0 (trỏ thẳng xuống bản đồ) đến mức tối đa phụ thuộc vào 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 10 trở xuống, góc tối đa là 30 độ.
Đặt góc nhìn theo phương thức lập trình bằng GMSCameraPosition
hoặc GMSCameraUpdate
hoặc bằng 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 xác định tỷ lệ của bản đồ. Ở các cấp độ thu phóng lớn hơn, bạn có thể thấy nhiều chi tiết hơn trên màn hình, trong khi ở các cấp độ thu phóng nhỏ hơn, bạn có thể thấy nhiều cảnh hơn.
Đặt chế độ 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
tạo hiệu ứng ảnh động thu phóng thêm một cấp từ 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 máy ảnh sao cho toàn bộ khu vực quan tâm xuất hiện ở mức thu phóng lớn nhất có thể, hãy đặt ranh giới cho chế độ xem máy ảnh. Ví dụ: nếu bạn muốn hiển thị tất cả các trạm xăng trong phạm vi 8 km từ vị trí hiện tại của người dùng, hãy di chuyển máy ảnh để tất cả các trạm xăng đều hiển thị trên màn hình:
- Tính toán
GMSCoordinateBounds
mà bạn muốn hiển thị trên màn hình. - Sử dụng phương thức
cameraForBounds:insets:
củaGMSMapView
để trả về mộtGMSCameraPosition
mới.
Việc đặt các giới hạn này đảm bảo rằng GMSCoordinateBounds
đã cho vừa khít trong kích thước của bản đồ hiện tại. Xin lưu ý rằng phương thức này đặt độ nghiêng và góc phương vị của bản đồ thành 0.
Ví dụ sau đây minh hoạ cách thay đổi máy ảnh để 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ế thao tác kéo của người dùng ở một khu vực nhất định
Các trường hợp này đặt giới hạn của bản đồ, nhưng sau đó người dùng có thể cuộn hoặc kéo ra ngoài các giới hạn này. Thay vào đó, bạn nên hạn chế các giới hạn tâm toạ độ của tâm điểm của bản đồ (mục tiêu của máy ảnh) để người dùng chỉ có thể cuộn và kéo trong các giới hạn này.
Ví dụ: ứ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 đồ ở một số giới hạn cụ thể, cho phép người dùng cuộn và kéo trong những giới hạn đó.
Để hạn chế thao tá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.
Để xoá giới hạn sau này, hãy đặt cameraTargetBounds
thành rỗng.
Swift
mapView.cameraTargetBounds = bounds
Objective-C
mapView.cameraTargetBounds = bounds;
Sơ đồ sau đây minh hoạ một tình huống khi mục tiêu của máy ảnh bị ràng buộc trong một khu vực lớn hơn một chút so với khung nhìn. Người dùng có thể cuộn và xoay, miễn là mục tiêu của máy ảnh vẫn nằm trong khu vực được giới hạn. Dấu thập đại diện cho mục tiêu của máy ảnh:
Bản đồ luôn lấp đầy khung nhìn, ngay cả khi điều đó khiến khung nhìn hiển thị các khu vực nằm ngoài giới hạn đã xác định. Ví dụ: nếu bạn đặt mục tiêu của máy ảnh ở một góc của khu vực có 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 vào khu vực đó. Sơ đồ sau đây minh hoạ trường hợp này. Dấu thập đại diện cho mục tiêu của máy ảnh:
Trong sơ đồ sau, mục tiêu của máy ảnh có giới hạn rất hạn chế, khiến người dùng có rất ít cơ hội cuộn hoặc xoay bản đồ. Dấu thập đại diện cho mục tiêu của máy ảnh:
Đặt mức thu phóng tối thiểu hoặc tối đa
Các hằng số toàn cục kGMSMinZoomLevel
và kGMSMaxZoomLevel
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 minZoom
và maxZoom
của GMSMapView
được đặt thành các hằng số này.
Để giới hạn phạm vi các 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 minZoom
và maxZoom
. Phương pháp này rất 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 một giá trị nằm ngoài phạm vi mới, thì 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, mức thu phóng ban đầu được xác định là 4. Khi phạm vi thu phóng được đặt thành 10-15 sau đó, 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];