Karo Katmanları

Platform seçin: Android iOS JavaScript

Haritanızın üst kısmına Karo Katmanı olarak resim ekleyebilirsiniz. Karo Katmanları: belirli bir yakınlaştırma düzeyinde harita karosunun üzerine yerleştirilir. Yeterince kutuyla , birden fazla yakınlaştırma düzeyinde, tüm haritanın Google'ın harita verilerine katkı sağlayabilir.

Giriş

Karo katmanları (bazen Karo Yer Paylaşımları olarak da adlandırılır), öğeleri üst üste Google'ın temel harita karolarının üzerine resimler. Bu, Google Ads'e veri eklemek için (ör. önemli yerler veya trafik bilgileri) ve reklamınızdaki yerel en iyi şekilde yararlanabilirsiniz. kGMSTypeNone harita türüyle birleştirildiğinde karo katmanları, Google'ın temel harita verilerini kendi verilerinizle değiştirmenize olanak tanır.

Karo katmanları, genellikle kapsamlı görüntüler eklemek istediğinizde kullanışlıdır. haritalarda inceleyebilirsiniz. Buna karşılık, zemin yer paylaşımları, tek bir resmi tek bir resmi düzeltmek istediğinizde kullanışlıdır haritada bir noktayla karşılaşırsınız.

Parça koordinatları

Maps API, görüntüleri her yakınlaştırma düzeyinde kare harita şeklinde ayırır düzenlenmiş bir ızgara gibi yerleştirilen karolar bulunur. Harita şuraya kaydırıldığında: yeni bir yakınlaştırma düzeyine getirildiğinde, Google Haritalar API'sı hangi karoların oluşturulur ve bunu, alınabilecek bir dizi karoya dönüştürür.

Google'ın Merkatör projeksiyonu uygulaması için, koordinat (0,0) her zaman x değerleriyle haritanın kuzeybatı köşesinde yer alır batıdan doğuya doğru artmakta ve kuzeyden güneye doğru y değerlerinde artış göstermektedir. Parçalar, söz konusu kaynaktan x,y koordinatları kullanılarak dizine eklenir. Örneğin, dünya 16 parçaya bölündüğünde, yakınlaştırma seviyesi 2'ye düştüğünde, her benzersiz bir x,y çifti tarafından referans verildi:

Dört satır ve dört karo sütununa bölünmüş dünya haritası.

Her harita bloğu 256x256 nokta biçiminde bir karedir. Yakınlaştırma düzeyi 0 olduğunda, tüm dünya oluşturulur. Her yakınlaştırma seviyesi, büyütmeyi bir faktör ikiye katlanır. Bu nedenle, 1. yakınlaştırma düzeyinde harita 2x2 karo ızgarası olarak, 2. yakınlaştırma düzeyinde 4x4 ızgara, 3. yakınlaştırma düzeyinde 8x8 ızgara olarak oluşturulur. Bir karo katmanı için görseller oluşturuyorsanız yeni bir Desteklemek istediğiniz her yakınlaştırma düzeyinde her karo için 256x256 puntoluk resim.

Karo Katmanı Ekleme

  1. Bir GMSURLTileLayer nesnesi veya GMSTileLayer/GMSSyncTileLayer.
  2. İsteğe bağlı olarak, zIndex özelliğini değiştirerek farklı arka plan katmanlarına sahip.
  3. map ayarlayarak GMSTileLayer nesnesini haritaya atayın

iOS için Haritalar SDK'sı, aşağıdakileri yapmak için üç sınıf sunar: karo katmanı uygulayabilirsiniz. Her sınıfla birlikte, içe aktarma işleminin nasıl gerçekleştirileceğini belirli {x,y,zoom} koordinat grubu için doğru harita parçasını gösterir. İlgili içeriği oluşturmak için kullanılan şu seçenekleri kullanabilirsiniz:

  • Uygulanmasını sağlayan GMSSyncTileLayer alt sınıfı UIImage örnek döndüren tileForX:y:zoom.
  • Eşzamansız yapılandırmanın uygulanmasını sağlayan GMSTileLayer alt sınıfı yöntemini çağıran requestTileForX:y:zoom yöntemini kullanabilirsiniz.
  • Kutuları otomatik olarak getirmek için mevcut GMSURLTileLayer sınıfını kullanın GMSTileURLConstructor bloğunu sağlar. GMSURLTileLayer alt sınıflandırılamayan somut bir sınıftır.

GMSSyncTileLayer veya GMSTileLayer alt sınıflarının kullanılması durumunda, nil karo sonucu, iOS için Haritalar SDK'sına verilerin şu anda Aksi takdirde bu özellik ileride kullanıma sunulabilir. Alternatif olarak: bu alanda hiç karo olmadığını belirtmek için kGMSTileLayerNoTile değerini döndürün konum.

GMSURLTileLayer için, GMSTileURLConstructor üzerinden nil geri dönmek bu konumda karo olmadığını gösterir.

URL'lerden karoları getirmek için "GMSURLTileKatman"ı kullanma

GMSURLTileLayer alt sınıflandırma gerektirmez ancak şunları yapmanız gerekir: GMSTileURLConstructor bloğunu uygular. Aşağıdaki kodda çok katlı bir binanın kat planını görüntülemek için GMSURLTileLayer kullanın.

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;
      

Kutuları UIImage olarak yayınlamak için GMSSyncTileLayer alt sınıfı

GMSSyncTileLayer ve GMSTileLayer, şu şekilde tasarlanmış soyut sınıflardır: alt sınıftır. Kutuları UIImage adına yayınlamak için bu sınıfları kullanabilirsiniz. Aşağıdaki örnek, haritadaki bazı karolar üzerinde özel bir resmin nasıl oluşturulacağını gösterir GMSSyncTileLayer alt sınıfını kullanarak.

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
      

Katmanı haritanıza eklemek için nesneyi örneklendirin ve harita özelliğini ayarlayın.

Swift

let layer = TestTileLayer()
layer.map = mapView
      

Objective-C

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

Retina cihazlar için Yüksek DPI Karoları

Yüksek DPI resimleri GMSSyncTileLayer ile kullanabilirsiniz. veya tileSize değerini 512 olarak ayarlayarak GMSURLTileLayer. tileSize özelliği, döndürülen parçanın piksel sayısını belirtir görseller şu şekilde görüntülenmeyi tercih eder: bunun varsayılan değeri 256'dır. Google Haritalar kutucuğunun resmi.

Yüksek DPI'ya sahip bir cihazda normal DPI karoları görüntülüyorsanız resimleri tileSize 512'ye ayarlayarak ayarlayın. Resimleri ölçeklendirmenin özellikle de ince çizgiler ve metinler için resim kalitesi. En iyi sonuçlar için tileSize ve resim DPI'sı gösterilir. Retina cihazlarda gösterilen haritalar 512'nin tileSize ile yüksek DPI resimleri görüntülerken en iyi şekilde görünürler; Retina olmayan cihazlarda gösterilen haritalar ise normal görüntülerle harika, ve 256 varsayılan tileSize.

Eski karoları temizleme

Katman tarafından sağlanan karolar 'eski' hale gelirse yöntem Yenilemeyi zorunlu kılmak için katmanda clearTileCache çağrılmalıdır. Bu, bu katmandaki tüm blokların yeniden yüklenmesine neden olur.

Swift

layer.clearTileCache()
      

Objective-C

[layer clearTileCache];