Kachelebenen

Plattform auswählen: Android iOS JavaScript

Sie können Bilder als Kachelebenen auf Ihre Karte legen. Kachelebenen sind werden bei einer bestimmten Zoomstufe über einer Kartenkachel platziert. Mit genügend Kacheln die Kartendaten von Google für die gesamte Karte bei mehreren Zoomstufen ergänzen.

Einführung

Mit Kachelebenen (auch Kachel-Overlays genannt) können Sie Bilder über den Kacheln der Basiskarte von Google. Dies ist eine hervorragende Möglichkeit, etwa POIs oder Verkehrsinformationen, und lokale Bilder, für Ihre App. In Kombination mit dem Kartentyp kGMSTypeNone Mit den Kachelebenen können Sie die Basiskartendaten von Google effektiv durch Ihre eigenen Daten ersetzen.

Kachelebenen sind nützlich, wenn Sie umfangreiches Bildmaterial hinzufügen möchten, normalerweise die große geografische Bereiche abdecken, bis hin zur Karte. Im Gegensatz dazu wird Boden- Overlays sind nützlich, wenn Sie ein einzelnes Bild an einem Punkt auf der Karte.

Kachelkoordinaten

Die Google Maps API unterteilt die Bilder bei jeder Zoomstufe in einen Satz quadratischer Karten. Kacheln, die in einem geordneten Raster angeordnet sind. Wenn auf einer Karte zu oder eine neue Zoomstufe festlegen, bestimmt die Google Maps API, welche Kacheln und wandelt dies in einen Satz Kacheln um, die abgerufen werden sollen.

Für die Implementierung der Mercator-Projektion durch Google wird die Kachel mit Die -Koordinate (0,0) befindet sich immer in der nordwestlichen Ecke der Karte, wobei x-Werte vorhanden sind der von Westen nach Osten ansteigt und der y-Wert von Norden nach Süden ansteigt. Die Kacheln werden mithilfe von x,y-Koordinaten aus diesem Ursprung indexiert. Beispiel: Zoomstufe 2. Wenn die Erde in 16 Kacheln unterteilt ist, kann jede Kachel durch Klicken auf durch ein eindeutiges x,y-Paar referenziert wird:

Weltkarte, unterteilt in Kacheln mit 4 Zeilen und 4 Spalten

Jede Kachel ist ein Quadrat mit 256x256 Punkten. Bei Zoomstufe 0 ist die ganze Welt in einer einzigen Kachel gerendert. Mit jeder Zoomstufe wird die Vergrößerung um Faktor von zwei. Bei Zoomstufe 1 wird die Karte also als 2x2-Raster Kacheln oder ein 4x4-Raster bei Zoomstufe 2, ein 8x8-Raster bei Zoomstufe 3 und so weiter. Wenn Sie Bilder für eine Kachelebene erstellen, müssen Sie eine neue Bild mit 256 x 256 Punkt pro Kachel für jede Zoomstufe, die unterstützt werden soll.

Kachelebene hinzufügen

  1. Instanziieren Sie ein GMSURLTileLayer-Objekt oder eine benutzerdefinierte abgeleitete Klasse von GMSTileLayer/GMSSyncTileLayer.
  2. Optional können Sie die Eigenschaft zIndex ändern, um ihre Position im folgenden Bereich anzupassen: in Beziehung zu anderen Kachelebenen.
  3. Weisen Sie das GMSTileLayer-Objekt der Karte zu, indem Sie sein map festlegen Property.

Das Maps SDK for iOS bietet drei Klassen, mit denen Sie eine Kachelebene implementieren. Bei jeder Klasse müssen Sie definieren, wie die richtige Kartenkachel für einen vorgegebenen Satz von {x,y,zoom}-Koordinaten Folgende Optionen sind verfügbar:

  • Erstellen Sie abgeleitete Klassen von GMSSyncTileLayer, die die Implementierung von tileForX:y:zoom, die UIImage Instanzen zurückgibt.
  • Erstellen Sie eine abgeleitete Klasse von GMSTileLayer, die die Implementierung der asynchronen requestTileForX:y:zoom, die später mit einem Kachelbild zurückgerufen wird.
  • Die vorhandene Klasse „GMSURLTileLayer“ verwenden, um Kacheln automatisch abzurufen von URLs durch Angabe des GMSTileURLConstructor-Blocks. GMSURLTileLayer ist eine konkrete Klasse, für die keine Unterklassen erstellt werden können.

Bei abgeleiteten Klassen von GMSSyncTileLayer oder GMSTileLayer wird durch die Angabe eines Das Ergebnis der Kachel nil teilt dem Maps SDK for iOS mit, dass die Daten momentan nicht verfügbar sein wird, aber möglicherweise in Zukunft verfügbar sein wird. Alternativ können Sie kGMSTileLayerNoTile zurückgeben, um anzuzeigen, dass hier keine Kachel vorhanden ist. Standort.

Bei der Rückgabe von nil vom GMSTileURLConstructor für GMSURLTileLayer gilt Folgendes: zeigt an, dass sich an dieser Position keine Kachel befindet.

Kacheln mithilfe von „GMSURLTileLayer“ von URLs abrufen

Für GMSURLTileLayer ist keine abgeleitete Klasse erforderlich, aber Sie müssen GMSTileURLConstructor-Block implementieren Der folgende Code zeigt, wie Sie Verwenden Sie GMSURLTileLayer, um den Gebäudeplan eines mehrstöckigen Gebäudes aufzurufen.

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;
      

Erstellen Sie abgeleitete Klassen von GMSSyncTileLayer, um Kacheln als UIImage bereitzustellen.

GMSSyncTileLayer und GMSTileLayer sind abstrakte Klassen, die abgeleitete Klassen ableiten. Mithilfe dieser Klassen können Sie Kacheln als UIImage-Elemente bereitstellen. Die folgenden Beispiel für das Rendern eines benutzerdefinierten Bilds über einigen Kacheln auf der Karte indem Sie von GMSSyncTileLayer abgeleitete Klassen erstellen.

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
      

Um die Kachelebene zur Karte hinzuzufügen, instanziieren Sie das Objekt und legen Sie seine Karteneigenschaft fest.

Swift

let layer = TestTileLayer()
layer.map = mapView
      

Objective-C

GMSTileLayer *layer = [[TestTileLayer alloc] init];
layer.map = mapView;
      

Kacheln mit hohem DPI-Wert für Retina-Geräte

Sie können Bilder mit hoher Auflösung verwenden, entweder mit GMSSyncTileLayer oder GMSURLTileLayer, indem Sie tileSize auf 512 setzen. Die Eigenschaft tileSize gibt die Anzahl der Pixel an, die die zurückgegebene Kachel werden Bilder bevorzugt angezeigt als: Der Standardwert ist 256, also die Dimension einer Google Maps-Kachel auf einem Nicht-Retina-Gerät.

Wenn Sie Kacheln mit normalem DPI-Wert auf einem Gerät mit hoher DPI-Rate anzeigen, können Sie indem Sie tileSize auf 512 setzen. Durch das Skalieren von Bildern besonders bei dünnen Linien oder Text. Die besten Ergebnisse erzielst du mit tileSize und DPI des Bildes auf dem Display. Karten auf einem Retina-Gerät bei der Anzeige von Bildern mit hohen DPI-Werten mit einem tileSize von 512 am besten aussehen; Karten, die auf einem Nicht-Retina-Gerät angezeigt werden, sehen hingegen auch auf normalen Bildern gut aus. und den Standardwert 256 für tileSize.

Veraltete Kacheln löschen

Wenn die von der Ebene bereitgestellten Kacheln veraltet sind, ist die Methode clearTileCache sollte auf der Ebene aufgerufen werden, um eine Aktualisierung zu erzwingen. Dadurch wird führen dazu, dass alle Kacheln in dieser Ebene neu geladen werden.

Swift

layer.clearTileCache()
      

Objective-C

[layer clearTileCache];