Map Tiles chỉ đơn giản là việc chia thế giới thành một lưới được lập chỉ mục. Điều 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ả những bộ dữ liệu do Google tuyển chọn:
Các ô 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ả vệ tinh và máy ảnh 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 bóng đồi.
Tất cả Map Tiles 2D đều được tham chiếu địa lý và 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 đường phố và khối nhà).
Chủ đề bản đồ
Bạn có thể nhận các ô bản đồ cho các chủ đề bản đồ sau.
| Chủ đề bản đồ | Mô tả |
|---|---|
| Bản đồ đường đi | Đườ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ã 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. 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 có hình ảnh về đại dươ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 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). Để biểu thị ranh giới cắt ngang đường kinh tuyến gốc, tây có thể là dương (ví dụ: 170) và đô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 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 ghi nhận công trạng mà bạn phải hiển thị trên bản đồ khi hiển thị các ô bản đồ đường đi 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 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ó sẵn trong mỗi hình chữ nhật.
Hàm toạ độ ô vuông
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 độ 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
};
}