Fragmenty mapy to po prostu podział świata na indeksowaną siatkę. Umożliwia to wydajny i dynamiczny dostęp do danych mapy i ich wykorzystywanie w różnych skalach kartograficznych. Interfejs Map Tiles API zapewnia dostęp do wielu tematycznych zbiorów danych geograficznych, w tym do tych opracowanych przez Google:
Kafelki z obrazami map drogowych oparte na wektorowych danych topograficznych ze stylizacją kartograficzną Google.
Ortofotografie wykonane przez kamery satelitarne i lotnicze, które dostarczają zdjęcia Ziemi z góry (w nadirze).
Mapy konturowe z cieniowaniem terenu.
Wszystkie fragmenty mapy 2D są georeferencyjne i wzajemnie dopasowane. Są one wybierane na podstawie zasięgu geograficznego widocznego obszaru i poziomu powiększenia. Poziomy powiększenia wahają się 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:
Motyw mapy | Opis |
---|---|
Plan | drogi, budynki, ciekawe miejsca i granice polityczne; |
Satelita | Zdjęcia wykonane z kosmosu |
Teren | Mapa konturowa przedstawiająca naturalne elementy, takie jak roślinność |
Aby wysyłać żądania dotyczące kafelków mapy do interfejsu Map Tiles API, musisz najpierw poprosić o token sesji. Token sesji śledzi bieżący stan mapy i obszaru widocznego. Podczas konfigurowania tokena sesji musisz ustawić wartość mapType
tak, aby pasowała do wybranego motywu mapy.
Następnie musisz uwzględnić token sesji w każdym żądaniu wysyłanym do interfejsu Map Tiles API.
Żądania informacji o widocznym obszarze
Widoczny obszar określa rozmiar ramki, w której wyświetlana jest scena świata. Żądania informacji o widocznym obszarze zwracają szczegóły dotyczące kafelków mapy, które składają się na bieżący widoczny obszar. Informacje o obszarze widoku są potrzebne, aby uniknąć wysyłania żądań dotyczących 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 obszaru widoku to żądanie HTTPS GET w tej 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 widoku wyrażone w stopniach. Wartości północ i południe muszą mieścić się w zakresie (-90,90), a wartości wschód i zachód w zakresie (-180, 180). Aby określić granice przekraczające południk zerowy, zachód może być dodatni (np. 170), a wschód ujemny (np. -170). Wszystkie parametry są wymagane.
Odpowiedzi dotyczące informacji 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 obszarze wyświetlania 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 atrybucji, który musisz wyświetlać na mapie, gdy wyświetlasz kafelki mapy drogowej i satelitarnej. Więcej informacji znajdziesz w zasadach interfejsu Map Tiles API.
maxZoomRect
- Zawiera tablicę prostokątów ograniczających, które nakładają się na bieżący obszar widoku. Zawiera też maksymalny poziom powiększenia dostępny w każdym prostokącie.
Funkcje współrzędnych kafelków
W większości języków programowania dostępne są narzędzia (proste funkcje), które umożliwiają konwertowanie par szerokości i długości geograficznej na współrzędne kafelków na określonym poziomie powiększenia.
Rozważmy ten przykładowy kod JavaScript, który najpierw przekształca wartość a
latLng
w punkt, a potem w współrzędne kafelka.
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
};
}