Map Tiles (Ô 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. 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 hoạt
ở nhiều tỷ lệ bản đồ. Map Tiles API cho phép bạn truy cập vào
nhiều bộ dữ liệu địa lý theo chủ đề, bao gồm cả bộ 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 chụp chỉnh trực giao được chụp bằng cả máy ảnh trên vệ tinh và trên không, cung cấp hình ảnh từ trên xuống (điểm thiên đỉnh) của trái đất.
Bản đồ đường đồng mức địa hình.
Tất cả Map Tiles 2D đều được tham chiếu địa lý và căn chỉnh với nhau. Các ô 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à khối nhà).
Chủ đề bản đồ
Bạn có thể nhận ô bản đồ cho các chủ đề bản đồ sau.
| Chủ đề bản đồ | Mô tả |
|---|---|
| Bản đồ đường đi | Đường đi, 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 đồ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 ô 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 sao cho khớp với chủ đề bản đồ mà bạn muốn.
Sau đó, bạn phải đưa mã thông báo phiên vào từng yêu cầu gửi đến Map Tiles API.
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 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 bạn không 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 sẽ chỉ hiển thị các ô 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 HTTPS GET ở 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 độ. Điểm cực bắc và cực nam phải nằm trong khoảng (-90,90), điểm cực đông và cực tây phải nằm trong khoảng (-180, 180). Để biểu thị ranh giới cắt ngang đường kinh tuyến gốc, điểm cực tây có thể là dương (ví dụ: 170) và điểm cực đông có thể là âm (ví dụ: -170). Tất cả các tham số đều là bắt buộc.
Phản hồi thông tin 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 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 mà bạn phải hiển thị trên bản đồ khi hiển thị ô bản đồ đường đi và ô bản đồ 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 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ó trong hầu hết các ngôn ngữ lập trình để 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 xét ví dụ về mã JavaScript sau đây. Mã này trước tiên chuyển đổi từ latLng sang một điểm, sau đó chuyển đổi từ một điểm sang 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
};
}