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

Ví dụ về lộ trìnhThẻ thông tin trong bản đồ chỉ đơn giản là việc phân chia thế giới vào 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 của bản đồ cho phép bạn truy cập vào nhiều tập dữ liệu địa lý theo chủ đề, bao gồm cả nội dung do Google tuyển chọn:

  • Ô 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.

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

  • Bản đồ đường đồng mức sườn đồi.

Tất cả các Ô bản đồ 2D đều được tham chiếu địa lý và được căn chỉnh với nhau. Chúng được chọn dựa trên phạm vi địa lý của khung nhìn và mức thu phóng. Mức thu phóng nằm trong khoảng từ 0 (để xem toàn bộ thế giới) đến 22 (để xem các con phố và các khối nhà).

Chủ đề bản đồ

Bạn có thể tải ô bản đồ cho các chủ đề bản đồ sau.

Chủ đề bản đồ Nội dung mô tả
Lộ trình Đường, toà nhà, địa điểm yêu thích và ranh giới chính trị
Vệ tinh Ảnh chụp từ không gian
Địa hình Bản đồ đường viền thể hiện các đối tượng tự nhiên như thực vật

Để yêu cầu ô bản đồ từ API Thẻ thông tin bản đồ, trước tiên bạn phải yêu cầu mã thông báo phiên. Mã phiên hoạt động theo dõi trạng thái hiện tại của bản đồ và khung nhìn của bạ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 của mình đến API Thẻ thông tin liên kết.

Yêu cầu thông tin 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 sẽ 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 về khung nhìn là để đảm bảo 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ì cuối cùng thành phố sẽ hiển thị các hình vuông màu xanh dương không có gì đặc trưng.

Yêu cầu khung nhìn là một yêu cầu HTTPS GET trong biểu mẫu 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 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 xa nhất về phía bắc, nam, đông và tây trong khung nhìn, được biểu thị bằng độ. Hướng Bắc và Nam phải nằm trong khoảng (-90,90), phía Đông và Tây phải nằm trong khoảng (-180, 180). Để thể hiện ranh giới băng qua kinh tuyến 180 độ, hướng Tây có thể mang giá trị dương (ví dụ: 170) và hướng Đông có thể mang giá trị âm (ví dụ: -170). Tất cả các tham số đều bắt buộc.

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

Phản hồi của khung nhìn cho bạn biết những khu vực có hình ảnh và mức thu phóng. Phản hồi thông tin về 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
    }, ...
  ]
}

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

copyright
Chứa một chuỗi thuộc tính mà bạn phải hiển thị trên bản đồ của mình khi hiển thị lộ trình và thẻ thông tin vệ tinh. Để biết thêm thông tin, hãy xem Chính sách về API Thẻ thông tin của bản đồ.
maxZoomRect
Chứa một mảng các hình chữ nhật ranh giới chồng chéo với khung nhìn hiện tại. Đồng thời chứa mức thu phóng tối đa có sẵn 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ác cặp vĩ độ/kinh độ sang toạ độ ô ở 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 sẽ chuyển đổi từ một latLng thành một điểm, sau đó từ một điểm tới 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
  };
}