Haritanızın üst kısmına Karo Katmanı olarak resim ekleyebilirsiniz. Döşeme Katmanları, belirli bir yakınlaştırma düzeyinde harita parçasının üzerine yerleştirilir. Yeterli sayıda karo olduğunda, birden fazla yakınlaştırma düzeyinde Google'ın harita verilerine tüm harita için ekleme yapabilirsiniz.
Giriş
Karo katmanları (bazen Karo Yer Paylaşımları olarak da adlandırılır), görüntüleri Google'ın temel harita bloklarının üzerine
bindirmenize olanak tanır. Bu, uygulamanıza önemli yerler veya trafik bilgileri gibi veriler ve yerel görüntüler eklemek için mükemmel bir yoldur. kGMSTypeNone
harita türüyle birleştirildiğinde, karo katmanları etkili bir şekilde Google'ın temel harita verilerini kendi verilerinizle değiştirmenize olanak tanır.
Karo katmanları, haritaya genellikle geniş coğrafi alanları kapsayan kapsamlı görüntüler eklemek istediğinizde kullanışlıdır. Buna karşılık, zemin örtüşmeleri haritadaki bir noktadaki tek bir resmi düzeltmek istediğinizde kullanışlıdır.
Parça koordinatları
Maps API, görüntüleri her yakınlaştırma düzeyinde, sıralı bir ızgarada düzenlenmiş kare harita parçalarına ayırır. Bir harita yeni bir konuma veya yeni bir yakınlaştırma seviyesine gittiğinde, Maps API hangi kartların gerekli olduğunu belirler ve bunu, alınabilecek bir dizi karoya dönüştürür.
Google'ın Merkatör projeksiyonu uygulamasında, koordinat (0,0) olan karo her zaman haritanın kuzeybatı köşesinde yer alır. x
değerleri batıdan doğuya doğru artarken y
değerleri kuzeyden güneye doğru artar.
Parçalar, söz konusu kaynaktan x,y
koordinatları kullanılarak dizine eklenir. Örneğin, yakınlaştırma seviyesi 2'de, dünya 16 parçaya ayrıldığında her karoya benzersiz bir x,y
çiftiyle referans verilebilir:
Her harita bloğu 256x256 nokta biçiminde bir karedir. Yakınlaştırma seviyesi 0 olduğunda, tüm dünya tek bir parçada oluşturulur. Her yakınlaştırma seviyesi, büyütmeyi iki kat artırır. Dolayısıyla, yakınlaştırma düzeyi 1'de harita, 2x2'lik bir karo ızgarası veya yakınlaştırma düzeyi 2'de 4x4'lük bir ızgara, yakınlaştırma düzeyi 3'te 8x8'lik bir ızgara vb. şeklinde oluşturulur. Bir karo katmanı için resimler oluşturuyorsanız desteklemek istediğiniz her bir yakınlaştırma düzeyinde her karo için 256x256 puntoluk yeni bir resim oluşturmanız gerekir.
Karo Katmanı Ekleme
- Bir
GMSURLTileLayer
nesnesi veyaGMSTileLayer
/GMSSyncTileLayer
özel alt sınıfı gösterin. - İsteğe bağlı olarak, diğer karo katmanlarına göre konumunu ayarlamak için
zIndex
özelliğini değiştirin. map
özelliğini ayarlayarakGMSTileLayer
nesnesini haritaya atayın.
iOS için Haritalar SDK'sı, karo katmanı uygulamak için kullanılabilecek üç sınıf sunar. Her sınıfla birlikte, belirli bir {x,y,zoom}
koordinat grubu için doğru harita blokunun nasıl getirileceğini tanımlamanız gerekir. Şu seçenekleri kullanabilirsiniz:
UIImage
örnek döndürentileForX:y:zoom
uygulanmasını sağlayanGMSSyncTileLayer
alt sınıfı.- Daha sonra karo görüntüsüyle geri çağıran eşzamansız yöntemin
requestTileForX:y:zoom
uygulamasını sağlayanGMSTileLayer
alt sınıfı. - Kutuları URL'lerden otomatik olarak getirmek ve
GMSTileURLConstructor
bloğunu sağlamak için mevcutGMSURLTileLayer
sınıfını kullanın.GMSURLTileLayer
, alt sınıflandırılması mümkün olmayan somut bir sınıftır.
GMSSyncTileLayer
veya GMSTileLayer
alt sınıflarının oluşturulması durumunda, nil
kutucuğu sonucunun sağlanması, iOS için Haritalar SDK'sına verilerin şu anda kullanılamadığını ancak gelecekte kullanılabileceğini bildirir. Alternatif olarak, bu konumda hiç karo olmadığını belirtmek için kGMSTileLayerNoTile
değerini döndürün.
GMSURLTileLayer
için, GMSTileURLConstructor
konumundan nil
döndürülmesi
bu konumda karo olmadığını gösterir.
URL'lerden karoları getirmek için "GMSURLTileKatman"ı kullanma
GMSURLTileLayer
alt sınıflandırma gerektirmez ancak GMSTileURLConstructor
blokunu uygulamanız gerekir. Aşağıdaki kod, çok katlı bir binanın kat planını görüntülemek için GMSURLTileLayer
özelliğinin nasıl kullanılacağını göstermektedir.
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
, alt sınıflandırılması için tasarlanmış soyut sınıflardır. Kutuları UIImage
adına yayınlamak için bu sınıfları kullanabilirsiniz. Aşağıdaki örnekte GMSSyncTileLayer
alt sınıflandırması yapılarak haritadaki bazı parçalar üzerinde özel bir resmin nasıl oluşturulacağı gösterilmektedir.
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ı
tileSize
değerini 512 olarak ayarlayarak yüksek DPI görüntüleri GMSSyncTileLayer
veya GMSURLTileLayer
ile kullanabilirsiniz.
tileSize
özelliği, döndürülen karo resimlerinin görüntülemeyi tercih edeceği piksel sayısını belirtir. Bu varsayılan olarak 256'ya (Retina olmayan bir cihazdaki Google Haritalar karosunun boyutu) ayarlanır.
Yüksek DPI'ya sahip bir cihazda normal DPI karoları görüntülüyorsanız tileSize
değerini 512 olarak ayarlayarak görüntüleri ölçeklendirebilirsiniz. Resimleri ölçeklendirmenin, özellikle ince çizgiler ve metinler için resim kalitesini düşürebileceğini unutmayın. En iyi sonuçlar için tileSize
ve resim DPI'sını ekranla eşleştirin. Retina cihazlarda gösterilen haritalar, en iyi şekilde, yüksek DPI'ya sahip resimler (tileSize
/512) ile görüntülenir. Retina olmayan cihazlarda gösterilen haritalar ise normal resimlerle ve varsayılan tileSize
/256 ile harika görünür.
Eski karoları temizleme
Katman tarafından sağlanan karolar "eski" hale gelirse yenilemeyi zorlamak için katmanda clearTileCache
yönteminin çağrılması gerekir. Bu işlem, bu katmandaki tüm blokların yeniden yüklenmesine neden olur.
Swift
layer.clearTileCache()
Objective-C
[layer clearTileCache];