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

Ví dụ về lộ trìnhThẻ thông tin bản đồ đơn giản là sự phân chia thế giới vào một lưới được lập chỉ mục. Công cụ này cho phép bạn truy cập và sử dụng dữ liệu bản đồ một cách hiệu quả và linh động ở nhiều tỷ lệ bản đồ. API Thẻ thông tin 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ả do Google tuyển chọn:

  • Các ô 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ỉnh hình được chụp bằng cả máy ảnh vệ tinh và máy ảnh trên không, giúp cung cấp hình ảnh từ trên xuống (dưới cùng) của trái đất.

  • Bản đồ đường bao quanh đồi dốc.

Tất cả các ô bản đồ 2D đều được tham chiếu địa lý và căn chỉnh với nhau. Các chế độ 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 mức thu phóng nằm trong khoảng từ 0 (để xem toàn bộ thế giới) đến 22 (để xem đường và các khối nhà).

Giao diện bản đồ

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

Giao diện 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 Hình ả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, chẳng hạn như thực vật

Để yêu cầu các ô bản đồ từ API Thẻ thông tin bản đồ, trước tiên, bạn phải yêu cầu một 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 cho 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ã phiên vào mỗi yêu cầu để ánh xạ Tiles API.

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 làm khung cảnh thế giới. Yêu cầu thông tin 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 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 ở cấp độ thu phóng 22, nhưng không phải là đại dương vì sau cùng thì thành phố sẽ hiển thị các hình vuông màu xanh lam không có gì nổi bật.

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

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

Phản hồi của khung nhìn cho bạn biết khu vực nào có hình ảnh và mức thu phóng. Phản hồi về thông tin khung nhìn có dạng 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 đồ khi hiển thị 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 của bản đồ.
maxZoomRect
Chứa một mảng các hình chữ nhật giới hạn 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 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 chuyển đổi từ latLng thành một điểm, sau đó chuyển đổi từ một điểm sang toạ độ thẻ thông tin.

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