Puedes agregar imágenes sobre tu mapa a modo de capas de mosaicos. Las capas de mosaicos son Colocarlos sobre un mosaico de un mapa con un nivel de zoom específico Si tienes suficientes tarjetas, puede complementar los datos de mapas de Google para todo el mapa, a varios niveles de zoom.
Introducción
Las capas de mosaicos (a veces denominadas superposiciones de mosaicos) te permiten superponer
sobre los mosaicos del Mapa base de Google. Esta es una excelente manera de agregar datos
como los lugares de interés o la información sobre el tráfico, y las imágenes locales para
tu app. Cuando se combina con el tipo de mapa kGMSTypeNone
,
las capas de mosaicos te permiten reemplazar de manera eficaz los datos del mapa base de Google por los tuyos.
Las capas de mosaicos son útiles cuando deseas agregar muchas imágenes, generalmente que cubren áreas geográficas extensas. Por el contrario, la base superposiciones resultan útiles cuando deseas fijar una sola imagen a la punto en el mapa.
Coordenadas del mosaico
La API de Google Maps desglosa las imágenes a cada nivel de zoom y forma un conjunto de mapas cuadrados que se organizan en una cuadrícula ordenada. Cuando un mapa se desplaza hasta una nueva ubicación, o un nuevo nivel de zoom, la Google Maps API determina los mosaicos .
Para la implementación de Google de la proyección de Mercator, el mosaico con
coordenada (0,0) siempre está en la esquina noroeste del mapa, con valores x
aumentando de oeste a este y valores y
que aumentan de norte a sur.
Los mosaicos se indexan a partir de las coordenadas x,y
a partir del origen mencionado. Por ejemplo, en
nivel de zoom 2, cuando la Tierra se divide en 16 mosaicos, cada mosaico puede
al que hace referencia un par x,y
único:
Cada mosaico de mapa es un cuadrado de 256 x 256 puntos. En el nivel de zoom 0, el mundo entero se renderizan en un solo mosaico. Cada nivel de zoom aumenta la ampliación en un factor de dos. Por lo tanto, en el nivel de zoom 1, el mapa se renderizará como una cuadrícula de 2 x 2 de mosaicos, una cuadrícula de 4 x 4 en el nivel 2 de zoom, una cuadrícula de 8 x 8 en el nivel de zoom 3, etc. Si quieres crear imágenes para una capa de mosaicos, deberás crear una nueva Imagen de 256 x 256 punto para cada mosaico en cada nivel de zoom que deseas admitir
Cómo agregar una capa de mosaicos
- Crea una instancia de un objeto
GMSURLTileLayer
o una subclase personalizada deGMSTileLayer
porGMSSyncTileLayer
- De forma opcional, puedes modificar la propiedad
zIndex
para ajustar su posición en con otras capas de mosaicos. - Configura su
map
para asignar el objetoGMSTileLayer
al mapa. propiedad.
El SDK de Maps para iOS proporciona tres clases que se pueden usar para lo siguiente:
implementa una capa de mosaicos. Con cada clase, deberás definir cómo recuperar
el mosaico de mapa correcto para un conjunto determinado de coordenadas {x,y,zoom}
. Las opciones disponibles son las siguientes:
- La subclase
GMSSyncTileLayer
, que proporciona la implementación detileForX:y:zoom
que muestra instancias deUIImage
. - Crea la subclase
GMSTileLayer
, que proporciona la implementación de la clase asíncrona. métodorequestTileForX:y:zoom
que luego vuelve a llamar con una imagen de mosaico. - Usa la clase existente,
GMSURLTileLayer
, para recuperar tarjetas automáticamente. de las URLs, proporcionando el bloqueGMSTileURLConstructor
.GMSURLTileLayer
es una clase concreta que no puede subclasificarse.
En el caso de la subclasificación de GMSSyncTileLayer
o de GMSTileLayer
, proporcionar un
El resultado del mosaico nil
le indicará al SDK de Maps para iOS que los datos se encuentran actualmente
pero que podría estarlo en el futuro. Por otro lado,
Se muestra kGMSTileLayerNoTile
para indicar que no hay ninguna tarjeta en este
ubicación.
Para GMSURLTileLayer
, mostrar nil
desde GMSTileURLConstructor
indican que no hay mosaicos en esta ubicación.
Cómo usar `GMSURLTileLayer` para recuperar mosaicos de URLs
GMSURLTileLayer
no requiere subclases, pero deberás
implementa el bloque GMSTileURLConstructor
. El siguiente código muestra cómo
usa GMSURLTileLayer
para mostrar el plano del edificio de un edificio de varios pisos.
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;
Crea la subclase GMSSyncTileLayer
para entregar tarjetas como UIImage
GMSSyncTileLayer
y GMSTileLayer
son clases abstractas diseñadas para
en subclases. Puedes usar estas clases para entregar mosaicos como UIImage
. Lo siguiente
En este ejemplo, se muestra cómo renderizar una imagen personalizada sobre algunos de los mosaicos del mapa
mediante la subclasificación de 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
Para agregar la capa a tu mapa, crea una instancia del objeto y configura su propiedad “mapa”.
Swift
let layer = TestTileLayer() layer.map = mapView
Objective-C
GMSTileLayer *layer = [[TestTileLayer alloc] init]; layer.map = mapView;
Tarjetas con valores altos de PPP para dispositivos con tecnología Retina
Puedes usar imágenes con valores altos de PPP con GMSSyncTileLayer
o GMSURLTileLayer
estableciendo tileSize
en 512.
La propiedad tileSize
indica la cantidad de píxeles que muestra el mosaico.
las imágenes preferirán aparecer como: el valor predeterminado es 256; la dimensión
de un mosaico de Google Maps en un dispositivo que no es Retina.
Si muestras mosaicos de valores normales de PPP en un dispositivo con valores altos de PPP, puedes ajustar la escala
las imágenes configurando tileSize
en 512. Ten en cuenta que aumentar la escala de las imágenes puede reducir
en especial para las líneas finas o el texto. Para obtener mejores resultados, haz coincidir los
tileSize
y los DPI de la imagen en la pantalla. Los mapas que se muestran en un dispositivo con pantalla Retina
se vean lo mejor posible cuando se muestren imágenes con valores altos de PPP con un tileSize
de 512;
mientras que los mapas que se muestran en dispositivos que no son Retina se verán muy bien con imágenes normales
y el valor predeterminado tileSize
de 256.
Borra mosaicos inactivos
Si los mosaicos proporcionados por la capa se “caducan”, el método
Se debe llamar a clearTileCache
en la capa para forzar una actualización. Si confirmas esta acción,
hace que se vuelvan a cargar todos los mosaicos de esta capa.
Swift
layer.clearTileCache()
Objective-C
[layer clearTileCache];