Tổng quan về Thẻ thông tin 2D

Ví dụ về lộ trìnhThẻ thông tin trên bản đồ chỉ là việc chia thế giới thành một lưới được lập chỉ mục. API này cho phép bạn truy cập và sử dụng dữ liệu bản đồ một cách linh hoạt và hiệu quả ở nhiều tỷ lệ bản đồ. API Thẻ thông tin trên bản đồ cung cấp cho bạn quyền truy cập vào nhiều tập dữ liệu địa lý theo chủ đề, bao gồm cả các tập dữ liệu do Google tuyển chọn:

  • Thẻ thông tin hình ảnh lộ trình dựa trên dữ liệu địa hình vectơ với kiểu bản đồ của Google.

  • Ảnh chụp từ trên cao được chụp bằng cả máy ảnh trên không và vệ tinh, cung cấp hình ảnh trái đất từ trên xuống (nadir).

  • Bản đồ đường đồng mức đổ bóng.

Tất cả Thẻ thông tin bản đồ 2D đều được tham chiếu địa lý và căn chỉnh với nhau. Các thành phần này được chọn dựa trên phạm vi địa lý của khung nhìn và mức thu phóng. Các cấp độ thu phóng dao động từ 0 (để xem toàn bộ thế giới) đến 22 (để xem đường phố và khu phố).

Chủ đề bản đồ

Bạn có thể tải ô bản đồ cho các giao diện bản đồ sau.

Chủ đề bản đồ Mô tả
Lộ trình Đường, toà nhà, điểm tham quan và ranh giới chính trị
Vệ tinh Hình ảnh chụp từ không gian
Địa hình Bản đồ đường đồng mức cho thấy các đặc điểm tự nhiên như thảm thực vật

Để yêu cầu thẻ thông tin bản đồ từ Map Tiles API, trước tiên, bạn phải yêu cầu mã thông báo phiên. Mã thông báo phiên theo dõi trạng thái hiện tại của bản đồ và khung nhìn. Khi thiết lập mã thông báo phiên, bạn phải đặt giá trị mapType khớp với giao diện bản đồ mà bạn muốn. Sau đó, bạn phải đưa mã thông báo phiên vào mỗi yêu cầu gửi đến API Thẻ thông tin trên bản đồ.

Yêu cầu thông tin về khung nhìn

Khung nhìn xác định kích thước của hộp đóng khung cảnh thế giới. Yêu cầu thông tin về khung nhìn trả về thông tin chi tiết về các ô bản đồ tạo nên khung nhìn hiện tại của bạn. Lý do bạn yêu cầu thông tin khung nhìn là để đảm bảo rằng bạn tránh yêu cầu hình ảnh ở các mức thu phóng không tồn tại.

Ví dụ: hầu hết các thành phố đều có hình ảnh ở mức thu phóng 22, nhưng không phải đại dương vì hình ảnh đại dương sẽ chỉ hiển thị các hình vuông màu xanh dương không có đặc điểm.

Yêu cầu khung nhìn là một yêu cầu GET HTTPS ở dạng sau.

curl "https://tile.googleapis.com/tile/v1/viewport?session=YOUR_SESSION_TOKEN&key=YOUR_API_KEY&zoom=zoom&north=north&south=south&east=east&west=west"

Yêu cầu này chứa các trường sau:

zoom
Mức thu phóng của khung nhìn.
north, south, east, west
Các điểm cực bắc, cực nam, cực đông và cực tây trong khung nhìn, được biểu thị bằng độ. Bắc và nam phải nằm trong phạm vi (-90,90), đông và tây phải nằm trong phạm vi (-180, 180). Để thể hiện các giới hạn vượt qua kinh tuyến đối diện, phía tây có thể là giá trị dương (ví dụ: 170) và phía đông có thể là giá trị âm (ví dụ: -170). Tất cả tham số đều bắt buộc.

Phản hồi thông tin về khung nhìn

Phản hồi khung nhìn cho bạn biết những khu vực có hình ảnh và ở mức thu phóng nào. Phản hồi thông tin khung nhìn có dạng như sau.

{
  "copyright": "Map data ©2023",
  "maxZoomRects": [
    {
      "maxZoom": 19,
      "north": 90,
      "south": -90,
      "east": 180,
      "west": -180
    },
    {
      "maxZoom": 9,
      "north": 90,
      "south": -90,
      "east": 180,
      "west": -180
    },
    {
      "maxZoom": 14,
      "north": 84.375,
      "south": -84.375,
      "east": 180,
      "west": -180
    }, ...
  ]
}

Phần nội dung phản hồi chứa các trường sau.

copyright
Chứa một chuỗi ghi công mà bạn phải hiển thị trên bản đồ khi hiển thị bản đồ lộ trình và ô vệ tinh. Để biết thêm thông tin, hãy xem Chính sách về API Thẻ thông tin trên bản đồ.
maxZoomRect
Chứa một mảng các hình chữ nhật giới hạn chồng lên khung nhìn hiện tại. Cũng chứa mức thu phóng tối đa có trong mỗi hình chữ nhật.

Hàm toạ độ ô

Các công cụ (hàm đơn giản) có sẵn trong hầu hết các ngôn ngữ lập trình để chuyển đổi từ cặp vĩ độ/kinh độ thành toạ độ ô tại một mức thu phóng cụ thể. Hãy xem xét ví dụ về mã JavaScript sau đây. Trước tiên, mã này chuyển đổi từ latLng thành một điểm, sau đó chuyển đổi từ một điểm thành toạ độ ô.

var TILE_SIZE = 256;

function fromLatLngToPoint(latLng) {
  var mercator = -Math.log(Math.tan((0.25 + latLng.lat() / 360) * Math.PI));
  return {
    x: TILE_SIZE * (latLng.lng() / 360 + 0.5),
    y: TILE_SIZE / 2 * (1 +  mercator / Math.PI)
  };
}

function fromLatLngToTileCoord(latLng, zoom) {
  var point = fromLatLngToPoint(latLng);
  var scale = Math.pow(2, zoom);

  return {
    x: Math.floor(point.x * scale / TILE_SIZE),
    y: Math.floor(point.y * scale / TILE_SIZE),
    z: zoom
  };
}