Fragmenty mapy to po prostu podział świata na siatkę indeksowaną. Umożliwia skuteczny i dynamiczny dostęp do danych map oraz ich wykorzystanie na wielu skalach kartograficznych. Interfejs Map Tiles API zapewnia dostęp do licznych tematycznych zbiorów danych geograficznych, w tym do tych sporządzonych przez Google:
Fragmenty obrazów na mapie drogowej oparte na wektorowych danych topograficznych Google stylu kartograficznego.
Ortofotografia wykonywana za pomocą aparatów satelitarnych i samolotów, zdjęć Ziemi przedstawiających Ziemię z lotu ptaka (nadir).
Mapy konturowe cienistw górskich
Wszystkie fragmenty mapy 2D mają określone georeferencje i są wyrównane względem siebie. Zostali wybrane na podstawie położenia geograficznego widocznego obszaru i poziomu powiększenia. Poziomy powiększenia zakresu od 0 (oglądanie całego świata) do 22 (oglądanie ulic i bloki).
Tematy map
Możesz pobrać kafelki dla poniższych motywów mapy.
Motyw mapy | Opis |
---|---|
Plan | Drogi, budynki, ciekawe miejsca i granice polityczne |
Satelita | zdjęcia kosmiczne zrobione, |
Teren | Mapa konturowa pokazująca obiekty naturalne, takie jak roślinność |
Aby zażądać kafelków mapy z Map Tiles API, musisz najpierw poprosić o token sesji. Token sesji
śledzi bieżący stan mapy i widocznego obszaru. Podczas konfigurowania tokenu sesji musisz ustawić wartość mapType
, aby pasowała do wybranego motywu mapy.
Następnie musisz umieścić token sesji w każdym żądaniu skierowanym do
Map Tiles API.
Prośby o dostęp do informacji o widocznym obszarze
Widoczny obszar określa rozmiar ramki, która otacza scenę światową. Widoczny obszar żądania informacji zwracają szczegóły dotyczące fragmentów mapy, które składają się na w bieżącym widoku. Powodem, dla którego prosisz o informacje o widocznym obszarze, jest to, uniknąć wysyłania żądań zdjęć przy nieistniejących poziomach powiększenia.
Na przykład większość miast ma zdjęcia na poziomie powiększenia 22, ale nie oceanu, ponieważ wyświetlałyby się tylko niebieskie kwadraty bez żadnych elementów.
Żądanie widocznego obszaru to żądanie HTTPS GET w poniższym formularzu.
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"
Prośba zawiera te pola:
zoom
- Poziom powiększenia widocznego obszaru.
north
,south
,east
,west
- Najdalej wysunięte na północ, południe, wschód i zachód punkty w widoku, wyrażone w stopniach. Północ i południe muszą mieścić się w zakresie (-90, 90), a wschód i zachód – w zakresie (-180, 180). Do określenia granic przez południk 180° dodatnia (na przykład 170), a wschód może być liczbą ujemną (na przykład -170). Wszystkie parametry są wymagane.
Odpowiedzi dotyczące widocznego obszaru
Odpowiedź w widocznym obszarze informuje, które obszary zawierają zdjęcia i które przybliżenie poziomów. Odpowiedź z informacjami o widocznym obszarze ma 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 poniższe pola.
copyright
- Zawiera ciąg znaków dotyczący atrybucji, który musisz wyświetlić na swojej mapie, gdy aby wyświetlić plan i kafelki z satelitów. Więcej informacji: Zasady interfejsu Map Tiles API
maxZoomRect
- Zawiera tablicę prostokątów ograniczających, które nakładają się na bieżącą widoczny obszar. Zawiera też maksymalny poziom powiększenia dostępny w każdym prostokącie.
Funkcje współrzędnych kafelków
Narzędzia (proste funkcje) dostępne w większości języków programowania umożliwiają konwersję par szerokości i długości geograficznej na współrzędne płytki na określonym poziomie powiększenia.
Przyjrzyjmy się temu przykładowemu kodowi JavaScript, który najpierw konwertuje z
latLng
do punktu, a potem od punktu do współrzędnych 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
};
}