Możesz dodawać obrazy na mapie jako warstwę kafelków. Warstwy kafelków są umieszczone nad kafelkiem mapy na określonym poziomie powiększenia. Gdy masz wystarczającą liczbę kafelków, może uzupełniać dane Google dotyczące całej mapy w różnych poziomach powiększenia.
Wprowadzenie
Warstwy kafelków (nazywane też warstwami kafelków) umożliwiają nakładanie
na podstawowych kafelkach mapy Google. To świetny sposób na dodawanie danych
- takich jak ciekawe miejsca lub informacje o natężeniu ruchu, oraz zdjęcia lokalne w
do aplikacji. W połączeniu z mapą kGMSTypeNone
warstwy kafelków pozwalają skutecznie zastąpić dane mapy podstawowej Google własnymi.
Warstwy kart są przydatne, gdy chcesz dodać obszerne zdjęcia. Zwykle na dużych obszarach geograficznych. W przeciwieństwie do tego metoda ziemi nakładki są przydatne, gdy chcesz poprawić pojedynczy obraz punkt na mapie.
Współrzędne kafelka
Interfejs API Map Google dzieli zdjęcia przy każdym powiększeniu na zestaw map kwadratowych kafelki; są one rozmieszczone w ułożonej siatce. Gdy mapa przewinie się do nową lokalizację lub nowy poziom powiększenia, interfejs API Map Google określa, które kafelki i przekształca je w zestaw kafelków do pobrania.
W przypadku implementacji przez Google odwzorowania Merkatora kafelek z
współrzędna (0,0) jest zawsze w północno-zachodnim rogu mapy, z wartościami x
rosną z zachodu na wschód, a wartości y
rosną z północy na południe.
Kafelki są indeksowane za pomocą współrzędnych x,y
z tego punktu początkowego. Na przykład przy
poziom powiększenia 2. Kiedy Ziemia jest podzielona na 16 kafelków, każdy kafelek można
, do której odwołuje się unikalna para x,y
:
Każdy kafelek mapy to kwadrat o wymiarach 256 x 256 punktów. Przy powiększeniu 0 cały świat widzi na jednym kafelku. Każdy poziom powiększenia zwiększa powiększenie dwa. Przy powiększeniu 1 mapa będzie renderowana jako siatka 2 x 2 lub siatkę 4 x 4 przy powiększeniu 2, siatkę 8 x 8 przy powiększeniu 3 itd. Jeśli tworzysz obrazy na warstwę kafelków, musisz utworzyć nowy Obraz 256 x 256 punktów dla każdego kafelka przy każdym obsługiwanym poziomie powiększenia.
Dodawanie warstwy kafelka
- Utwórz instancję obiektu
GMSURLTileLayer
lub niestandardową podklasęGMSTileLayer
/GMSSyncTileLayer
. - Opcjonalnie zmodyfikuj właściwość
zIndex
, by dostosować jej pozycję w odniesieniu do innych warstw płytek. - Przypisz obiekt
GMSTileLayer
do mapy, ustawiając jegomap
usłudze.
Maps SDK na iOS udostępnia 3 klasy, których można użyć do:
zaimplementuj warstwę kafelków. Przy każdej klasie musisz określić sposób pobierania
prawidłowy kafelek mapy dla danego zestawu współrzędnych {x,y,zoom}
.
dostępne opcje to:
- Podklasa
GMSSyncTileLayer
, zapewniająca implementacjętileForX:y:zoom
, która zwracaUIImage
instancji. - Podklasa
GMSTileLayer
udostępniająca implementację asynchronicznego metodarequestTileForX:y:zoom
, która później wywołuje metodę z obrazem kafelka. - Użyj istniejącej klasy,
GMSURLTileLayer
, aby automatycznie pobierać kafelki z adresów URL, udostępniając blokGMSTileURLConstructor
.GMSURLTileLayer
jest konkretną klasą, której nie można podklasyfikować.
W przypadku podklasyfikacji GMSSyncTileLayer
lub GMSTileLayer
zostanie podany parametr
Wynik kafelka nil
będzie informować pakiet SDK Maps na iOS, że dane są obecnie dostępne
niedostępny, ale może być dostępny w przyszłości. Ewentualnie
zwrócij kGMSTileLayerNoTile
, aby wskazać, że w tym miejscu nie ma żadnego kafelka
lokalizacji.
W przypadku GMSURLTileLayer
zwrot nil
z GMSTileURLConstructor
będzie
wskazują, że w tym miejscu nie ma żadnego kafelka.
Używanie „GMSURLTileLayer” do pobierania kafelków z adresów URL
GMSURLTileLayer
nie wymaga podklasy, ale musisz
i zaimplementować blok GMSTileURLConstructor
. Poniższy kod pokazuje, jak
Użyj pola GMSURLTileLayer
, by wyświetlić plan piętra wielopoziomowego budynku.
Swift
let floor = 1 // Implement GMSTileURLConstructor // Returns a Tile based on the x,y,zoom coordinates, and the requested floor let urls: GMSTileURLConstructor = { (x, y, zoom) in let url = "https://www.example.com/floorplans/L\(floor)_\(zoom)_\(x)_\(y).png" return URL(string: url) } // Create the GMSTileLayer let layer = GMSURLTileLayer(urlConstructor: urls) // Display on the map at a specific zIndex layer.zIndex = 100 layer.map = mapView
Objective-C
NSInteger floor = 1; // Create the GMSTileLayer GMSURLTileLayer *layer = [GMSURLTileLayer tileLayerWithURLConstructor:^NSURL * _Nullable(NSUInteger x, NSUInteger y, NSUInteger zoom) { NSString *url = [NSString stringWithFormat:@"https://www.example.com/floorplans/L%ld_%lu_%lu_%lu.png", (long)floor, (unsigned long)zoom, (unsigned long)x, (unsigned long)y]; return [NSURL URLWithString:url]; }]; // Display on the map at a specific zIndex layer.zIndex = 100; layer.map = mapView;
Podklasa GMSSyncTileLayer
wyświetla kafelki jako UIImage
GMSSyncTileLayer
i GMSTileLayer
to klasy abstrakcyjne, które mają na celu
podklasy. Możesz użyć tych klas do wyświetlania kafelków jako elementów UIImage
. Poniższe informacje
przykład pokazuje, jak wyświetlić niestandardowy obraz na niektórych kafelkach na mapie
przez podklasyfikację GMSSyncTileLayer
.
Swift
class TestTileLayer: GMSSyncTileLayer { override func tileFor(x: UInt, y: UInt, zoom: UInt) -> UIImage? { // On every odd tile, render an image. if (x % 2 == 1) { return UIImage(named: "australia") } else { return kGMSTileLayerNoTile } } }
Objective-C
@interface TestTileLayer : GMSSyncTileLayer @end @implementation TestTileLayer - (UIImage *)tileForX:(NSUInteger)x y:(NSUInteger)y zoom:(NSUInteger)zoom { // On every odd tile, render an image. if (x % 2 == 1) { return [UIImage imageNamed:@"australia"]; } else { return kGMSTileLayerNoTile; } } @end
Aby dodać warstwę do mapy, utwórz instancję obiektu i ustaw jego właściwość mapy.
Swift
let layer = TestTileLayer() layer.map = mapView
Objective-C
GMSTileLayer *layer = [[TestTileLayer alloc] init]; layer.map = mapView;
Kafelki High DPI na urządzenia Retina
W GMSSyncTileLayer
możesz używać obrazów o wysokiej rozdzielczości DPI
lub GMSURLTileLayer
, ustawiając tileSize
na 512.
Właściwość tileSize
wskazuje liczbę pikseli, które zwrócił zwrócony kafelek.
jako, domyślna wartość to 256, czyli wymiar
kafelka Map Google na urządzeniu innym niż Retina.
Jeśli są wyświetlane normalne kafelki DPI na urządzeniu o wysokiej rozdzielczości DPI, można
obrazy można zwiększyć przez ustawienie parametru tileSize
na 512. Pamiętaj, że skalowanie obrazów może zmniejszyć
jakości obrazu, szczególnie w przypadku drobnych linii i tekstu. Aby uzyskać najlepsze wyniki, użyj parametru
tileSize
i DPI obrazu na wyświetlaczu. Mapy wyświetlane na urządzeniu Retina
wyglądają najlepiej przy wyświetlaniu obrazów o wysokiej rozdzielczości DPI przy współczynniku tileSize
o wartości 512 pikseli;
natomiast mapy wyświetlane na urządzeniach innych niż Retina będą wyglądać lepiej na zwykłych obrazach.
i domyślna wartość tileSize
wynosząca 256.
Czyszczenie nieaktualnych kafelków
Jeśli kafelki udostępnione przez warstwę staną się „nieaktualne”,
Aby wymusić odświeżenie, należy wywołać metodę clearTileCache
w warstwie. Dzięki temu
wszystkie kafelki w tej warstwie zostaną ponownie załadowane.
Swift
layer.clearTileCache()
Objective-C
[layer clearTileCache];