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:
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
- Bir
GMSURLTileLayer
nesnesi veyaGMSTileLayer
/GMSSyncTileLayer
. - İsteğe bağlı olarak,
zIndex
özelliğini değiştirerek farklı arka plan katmanlarına sahip. map
ayarlayarakGMSTileLayer
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ürentileForX:y:zoom
. - Eşzamansız yapılandırmanın uygulanmasını sağlayan
GMSTileLayer
alt sınıfı yöntemini çağıranrequestTileForX:y:zoom
yöntemini kullanabilirsiniz. - Kutuları otomatik olarak getirmek için mevcut
GMSURLTileLayer
sınıfını kullanınGMSTileURLConstructor
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];