Omówienie kart 2D

Przykład harmonogramuFragmenty mapy to po prostu podział świata na siatkę indeksowaną. Umożliwia ona dynamiczny i wydajny dostęp do danych mapy w różnych skalach kartograficznych. Interfejs Map Tiles API zapewnia dostęp do licznych tematycznych zbiorów danych geograficznych, w tym do tych sporządzonych przez Google:

  • Płytki mapy drogowej oparte na wektorowych danych topograficznych ze stylizacją kartograficzną Google.

  • ortofotografia wykonana zarówno za pomocą kamer satelitarnych, jak i lotniczych, które dostarczają zdjęć Ziemi z lotu ptaka (z nadiru).

  • mapy z konturem cieniowania wypukłego.

Fragmenty mapy 2D są georeferencjonowane i wyrównane względem siebie. Są one wybierane na podstawie geograficznego zasięgu widocznego obszaru i poziomu powiększenia. Poziomy powiększenia sięgają od 0 (aby zobaczyć cały świat) do 22 (aby zobaczyć ulice i bloki).

Motywy mapy

Płytki mapy możesz pobrać dla tych motywów mapy:

Motyw mapy Opis
Plan działania drogi, budynki, punkty orientacyjne i granice polityczne;
Satelita zdjęcia wykonane z poziomu kosmosu,
Teren mapa konturowa, która pokazuje elementy naturalne, takie jak roślinność;

Aby zażądać kafelków mapy z interfejsu Map Tiles API, musisz najpierw poprosić o token sesji. Token sesji śledzi bieżący stan mapy i widoku. Podczas konfigurowania tokenu sesji musisz ustawić wartość mapType zgodnie z wybranym motywem mapy. Następnie musisz dołączyć token sesji do każdego żądania wysyłanego do Map Tiles API.

Prośby o informacje dotyczące widocznego obszaru

Widok określa rozmiar pola, które obramowuje scenę świata. Prośby o informacje dotyczące widoku zwracają szczegóły dotyczące elementów mapy, które tworzą bieżący widok. Informacje o widoku przesyłasz, aby uniknąć żądania obrazów w poziomach powiększenia, które nie istnieją.

Na przykład większość miast ma zdjęcia na poziomie powiększenia 22, ale nie dotyczy to oceanu, ponieważ wyświetlałyby się tylko niebieskie kwadraty bez żadnych elementów.

Żądanie dotyczące widoku jest żądaniem HTTPS GET o takim formacie.

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). Aby wyrazić granice przecinające antymeridian, zachód może być dodatni (np. 170), a wschód – ujemny (np. –170). Wszystkie parametry są wymagane.

Odpowiedzi na pytania dotyczące widocznego obszaru

Odpowiedź z Viewport informuje, które obszary zawierają obrazy i przy jakim powiększeniu. Odpowiedź z informacjami o widoku ma taki format.

{
  "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, który musisz wyświetlić na mapie, gdy wyświetlasz mapę drogową i płytki satelitarne. Więcej informacji znajdziesz w zasadach dotyczących Map Tiles API.
maxZoomRect
Zawiera tablicę prostokątów ograniczających, które nakładają się na bieżący widok. Zawiera też maksymalny poziom powiększenia dostępny w każdym prostokącie.

Funkcje współrzędnych mapy

Większość języków programowania udostępnia narzędzia (proste funkcje) do konwertowania par szerokości i długości geograficznej na współrzędne płytek na określonym poziomie powiększenia. Rozważ ten przykład kodu JavaScript, który najpierw konwertuje obiekt latLng na punkt, a potem punkt na współrzędne płytki.

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
  };
}