Fragmenty mapy to po prostu podział świata na indeksowaną siatkę. Umożliwia on wydajny i dynamiczny dostęp do danych mapy oraz ich wykorzystanie w różnych skalach kartograficznych. Map Tiles API zapewnia dostęp do wielu tematycznych zbiorów danych geograficznych, w tym do zbiorów danych Google:
Kafelki obrazów mapy drogowej oparte na wektorowych danych topograficznych ze stylem kartograficznym Google.
Ortofotografie wykonane przez kamery satelitarne i lotnicze, które dostarczają zdjęcia Ziemi z góry (nadir).
Mapy konturowe z cieniowaniem.
Wszystkie fragmenty mapy 2D są georeferencyjne i dopasowane do siebie. Są one wybierane na podstawie zasięgu geograficznego widocznego obszaru i poziomu powiększenia. Poziomy powiększenia mieszczą się w zakresie od 0 (aby wyświetlić cały świat) do 22 (aby wyświetlić ulice i bloki).
Motywy mapy
Możesz pobrać kafelki mapy dla tych motywów mapy.
| Motyw mapy | Opis |
|---|---|
| Plan | drogi, budynki, ciekawe miejsca i granice polityczne; |
| Satelita | Zdjęcia wykonane z kosmosu |
| Teren | Mapa konturowa, która pokazuje elementy naturalne, takie jak roślinność |
Aby poprosić o fragmenty mapy z interfejsu Map Tiles API, musisz najpierw poprosić o token sesji. Token sesji śledzi bieżący stan mapy i widocznego obszaru. Podczas konfigurowania tokena sesji musisz ustawić wartość mapType, aby pasowała do wybranego motywu mapy.
Następnie musisz dołączyć token sesji do każdego żądania wysyłanego do interfejsu Map Tiles API.
Prośby o informacje o widocznym obszarze
Widoczny obszar określa rozmiar pola, które obejmuje scenę świata. Żądania informacji o widocznym obszarze zwracają szczegóły dotyczące kafelków mapy, które tworzą bieżący widoczny obszar. Informacje o obszarze roboczym są potrzebne, aby uniknąć żądania zdjęć na poziomach powiększenia, które nie istnieją.
Na przykład większość miast ma zdjęcia na poziomie powiększenia 22, ale nie ocean, ponieważ wyświetlałyby się tylko niebieskie kwadraty bez żadnych szczegółów.
Żądanie dotyczące widocznego obszaru to żądanie HTTPS GET w następującej postaci:
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"
Żądanie zawiera te pola:
zoom- Poziom powiększenia widocznego obszaru.
north,south,east,west- Najbardziej wysunięte na północ, południe, wschód i zachód punkty w obszarze widoczności, wyrażone w stopniach. Wartości północ i południe muszą mieścić się w zakresie (-90,90), a wschód i zachód – w zakresie (-180, 180). Aby wyrazić granice przekraczające antymerydian, zachód może być dodatni (np. 170), a wschód ujemny (np. -170). Wszystkie parametry są wymagane.
Odpowiedzi z informacjami o widocznym obszarze
Odpowiedź dotycząca widocznego obszaru informuje, które obszary mają zdjęcia i na jakich poziomach powiększenia. Odpowiedź z informacjami o widocznym obszarze ma następującą postać.
{
"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
}, ...
]
}
Treść odpowiedzi zawiera te pola.
copyright- Zawiera ciąg znaków z informacjami o autorstwie, który musisz wyświetlać na mapie, gdy wyświetlasz kafelki mapy drogowej i satelitarnej. Więcej informacji znajdziesz w zasadach dotyczących interfejsu Map Tiles API.
maxZoomRect- Zawiera tablicę prostokątów ograniczających, które nakładają się na bieżący widoczny obszar. Zawiera też maksymalny poziom powiększenia dostępny w każdym prostokącie.
Funkcje współrzędnych mapy
W większości języków programowania dostępne są narzędzia (proste funkcje) do konwertowania par szerokości i długości geograficznej na współrzędne mapy na określonym poziomie powiększenia.
Rozważmy ten przykładowy kod JavaScript, który najpierw konwertuje obiekt latLng na punkt, a następnie punkt na współrzędne mapy.
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
};
}