Ô bản đồ chỉ đơn giản là việc chia thế giới thành một lưới được lập chỉ mục. Thư viện 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 đồ. Map Tiles API 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ả dữ liệu do Google tuyển chọn:
Hình ảnh bản đồ đường đi dựa trên dữ liệu địa hình vectơ với kiểu bản đồ của Google.
Ảnh trực giao được chụp bằng cả camera vệ tinh và camera trên không, cung cấp hình ảnh từ trên xuống (thiên đỉnh) của trái đất.
Bản đồ đường đồng mức có bóng đồi.
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 điểm đánh dấu 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. Mức thu phóng nằm trong khoảng từ 0 (để xem toàn bộ thế giới) đến 22 (để xem đường phố và các khối nhà).
Chủ đề bản đồ
Bạn có thể lấy các ô bản đồ cho các giao diện bản đồ sau.
| Giao diện bản đồ | Mô tả |
|---|---|
| Lộ trình | Đường, toà nhà, địa điểm yêu thích và ranh giới hành chính |
| 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 các ô bản đồ từ Map Tiles API, trước tiên, bạn phải yêu cầu một mã phiên. Mã 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ã phiên, bạn phải đặt giá trị mapType sao cho 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 tới
Map 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 đó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 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 đại dương thì khô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 gì.
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 xa nhất về phía bắc, nam, đông và tây trong khung nhìn, được biểu thị bằng độ. Bắc và nam phải nằm trong khoảng (-90,90), đông và tây phải nằm trong khoảng (-180, 180). Để thể hiện ranh giới vượt qua kinh tuyến gốc, phía tây có thể là số dương (ví dụ: 170) và phía đông có thể là số âm (ví dụ: -170). Tất cả các tham số đều là bắt buộc.
Câu trả lời về thông tin khung nhìn
Phản hồi của khung nhìn cho bạn biết những khu vực nào 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
}, ...
]
}
Nội dung phản hồi chứa các trường sau.
copyright- Chứa một chuỗi thông tin ghi nhận tác giả mà bạn phải hiển thị trên bản đồ khi hiển thị bản đồ đường và ô vệ tinh. Để biết thêm thông tin, hãy xem Chính sách của Map Tiles API.
maxZoomRect- Chứa một mảng các hình chữ nhật bao quanh chồng chéo với khung nhìn hiện tại. Cũng chứa mức thu phóng tối đa có sẵn trong mỗi hình chữ nhật.
Hàm toạ độ ô
Hầu hết các ngôn ngữ lập trình đều có công cụ (hàm đơn giản) để chuyển đổi từ cặp vĩ độ/kinh độ sang tọa độ ô vuông ở một mức thu phóng cụ thể.
Hãy xem ví dụ về mã JavaScript sau đây. Mã này trước tiên sẽ chuyển đổi từ latLng thành một điểm, sau đó chuyển đổi từ một điểm thành tọa độ ô vuông.
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
};
}