Haritanızın üzerine karo katmanı olarak resim ekleyebilirsiniz. Karo katmanları, belirli bir yakınlaştırma seviyesinde harita karosunun üzerine yerleştirilir. Yeterli sayıda karo ile Google'ın harita verilerini tüm harita için birden fazla yakınlaştırma seviyesinde destekleyebilirsiniz.
Giriş
Bazen karo yer paylaşımları olarak da adlandırılan karo katmanları, Google'ın temel harita karolarının üzerine resim yerleştirmenize olanak tanır. Uygulamanıza önemli yerler veya trafik bilgileri gibi veriler ve yerel görüntüler eklemek için bu özelliği kullanın. kGMSTypeNone harita türüyle birleştirildiğinde karo katmanları, Google'ın temel harita verilerini kendi verilerinizle etkili bir şekilde 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, yer yer paylaşımları, haritadaki bir noktaya tek bir resim sabitlemek istediğinizde kullanışlıdır.
Parça koordinatları
Maps API, her yakınlaştırma seviyesindeki görüntüleri, sıralı bir ızgara şeklinde düzenlenmiş kare harita karolarına böler. Harita yeni bir konuma veya yeni bir yakınlaştırma seviyesine kaydırıldığında Maps API, hangi karoların gerekli olduğunu belirler ve bunu alınacak bir karo kümesine dönüştürür.
Mercator projeksiyonunun Google uygulamasında, (0,0) koordinatına sahip karo her zaman haritanın kuzeybatı köşesindedir. x değerleri batıdan doğuya, y değerleri ise kuzeyden güneye doğru artar.
Karolar, bu başlangıç noktasından itibaren x,y koordinatları kullanılarak dizine eklenir. Örneğin, 2. yakınlaştırma seviyesinde dünya 16 karoya bölünür ve her karoya benzersiz bir x,y çiftiyle referans verilebilir:
Her harita karosu 256x256 noktalık bir karedir. 0 yakınlaştırma seviyesinde tüm dünya tek bir karoda oluşturulur. Her yakınlaştırma seviyesi, büyütme oranını iki kat artırır. Örneğin, 1. yakınlaştırma seviyesinde harita 2x2'lik bir karo ızgarası, 2. yakınlaştırma seviyesinde 4x4'lük bir ızgara ve 3. yakınlaştırma seviyesinde 8x8'lik bir ızgara olarak oluşturulur. Karo katmanı için resim oluşturmak istiyorsanız desteklemek istediğiniz her yakınlaştırma seviyesindeki her karo için 256x256 noktalık bir resim oluşturun.
Karo katmanı ekleme
- Bir
GMSURLTileLayernesnesini veyaGMSTileLayerya daGMSSyncTileLayer'ın özel bir alt sınıfını örneklendirin. - Diğer karo katmanlarına göre konumunu ayarlamak için
zIndexözelliğini isteğe bağlı olarak değiştirebilirsiniz. mapözelliğini ayarlayarakGMSTileLayernesnesini haritaya atayın.
iOS için Haritalar SDK'sı, karo katmanı uygulamak için kullanılabilecek üç sınıf sunar. Her sınıfta, belirli bir {x,y,zoom} koordinat kümesi için doğru harita karosunun nasıl getirileceğini tanımlamanız gerekir. Aşağıdaki seçenekler kullanılabilir:
UIImageörneklerini döndürentileForX:y:zoomuygulamasını sağlayanGMSSyncTileLayeralt sınıfı.- Daha sonra bir karo resmiyle geri çağıran eşzamansız
requestTileForX:y:zoomyönteminin uygulamasını sağlayanGMSTileLayeralt sınıfı. GMSTileURLConstructorbloğunu sağlayarak URL'lerden otomatik olarak karo almak için mevcutGMSURLTileLayersınıfını kullanın.GMSURLTileLayer, alt sınıfı oluşturulamayan somut bir sınıftır.
GMSSyncTileLayer veya GMSTileLayer alt sınıfı oluşturulurken nil karo sonucu sağlanırsa iOS için Haritalar SDK'sı, verilerin kullanılamadığını ancak gelecekte kullanılabileceğini bildirir. Alternatif olarak, bu konumda karo olmadığını belirtmek için kGMSTileLayerNoTile değerini döndürün.
GMSURLTileLayer için GMSTileURLConstructor yönteminden nil döndürülmesi, bu konumda karo olmadığını gösterir.
URL'lerden karo getirmek için GMSURLTileLayer'ı kullanma
GMSURLTileLayer için alt sınıf oluşturmanız gerekmez ancak GMSTileURLConstructor bloğunu uygulamanız gerekir. Aşağıdaki kodda, çok katlı bir binanın kat planını görüntülemek için GMSURLTileLayer öğesinin nasıl kullanılacağı gösterilmektedir.
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;
Karoları UIImage olarak sunmak için GMSSyncTileLayer alt sınıfını kullanma
GMSSyncTileLayer ve GMSTileLayer, alt sınıflara ayrılmak üzere tasarlanmış soyut sınıflardır. Bu sınıfları kullanarak karoları UIImage olarak sunabilirsiniz. Aşağıdaki örnekte, GMSSyncTileLayer alt sınıfı oluşturularak haritadaki bazı karoların ü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 GMSSyncTileLayer veya GMSURLTileLayer ile yüksek DPI'lı resimler kullanabilirsiniz.
tileSize özelliği, döndürülen karo resimlerinin görüntülenmeyi tercih edeceği piksel sayısını gösterir. Bu değer varsayılan olarak 256'dır (Retina olmayan bir cihazdaki Google Haritalar karosunun boyutu).
Yüksek DPI'lı bir cihazda normal DPI'lı karolar gösteriyorsanız tileSize değerini 512 olarak ayarlayarak resimleri ölçeklendirebilirsiniz. Görüntüleri ölçeklendirmenin, özellikle ince çizgiler veya metinler için resim kalitesini düşürebileceğini unutmayın. En iyi sonuçlar için tileSize ve resim DPI'ını ekrana uygun hale getirin. Retina cihazlarda gösterilen haritalar, 512 tileSize değerine sahip yüksek DPI'lı resimler gösterildiğinde en iyi şekilde görünür. Retina olmayan cihazlarda gösterilen haritalar ise normal resimler ve varsayılan 256 tileSize değeriyle mükemmel görünür.
Eski karoları temizleme
Katman tarafından sağlanan karolar "eski" hale gelirse yenilemeyi zorunlu kılmak için katmanda clearTileCache yöntemi çağrılmalıdır. Bu işlem, bu katmandaki tüm karoların yeniden yüklenmesine neden olur.
Swift
layer.clearTileCache()
Objective-C
[layer clearTileCache];