Haritanızın üst kısmına bir Karo Katmanı olarak resim ekleyebilirsiniz. Karo Katmanları, belirli bir yakınlaştırma düzeyinde harita karosunun üzerine yerleştirilir. Yeterli sayıda karoyla, birden fazla yakınlaştırma düzeyinde tüm harita için Google'ın harita verilerini ekleyebilirsiniz.
Giriş
Karo katmanları (Bazen Karo Yer Paylaşımları olarak adlandırılır), görüntüleri Google'ın temel harita döşemelerinin üzerine yerleştirmenize olanak tanır. Bu, önemli yerler veya trafik bilgileri gibi verileri ve yerel görüntüleri uygulamanıza
eklemenin harika bir yoludur. Parça katmanları,
kGMSTypeNone
harita türüyle birlikte kullanıldığında 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 yararlı olur. Bunun aksine, yer yer paylaşımları harita üzerindeki bir noktada tek bir resmi düzeltmek istediğinizde yararlı olur.
Parça koordinatları
Maps API, her yakınlaştırma düzeyindeki görüntüleri, sıralı bir ızgarada düzenlenmiş bir dizi kare harita karosuna böler. Bir harita kayarak yeni bir konuma ya da yeni bir yakınlaştırma düzeyine geldiğinde, Haritalar API'si hangi kutuların gerektiğini belirler ve bunu almak için bir dizi karoya dönüştürür.
Google'ın Mercator projeksiyonunu uygularken (0,0) koordinatlı 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.
Karolar, ilgili kaynaktan x,y
koordinatları kullanılarak dizine eklenir. Örneğin, yakınlaştırma seviyesi 2'de, dünya 16 parçaya bölündüğünde her bir parçaya benzersiz bir x,y
çiftiyle referans verilebilir:
Her bir harita parçası, 256x256 nokta boyutunda bir karedir. Yakınlaştırma düzeyi 0 olduğunda, tüm dünya tek bir parçada oluşturulur. Her yakınlaştırma düzeyi, büyütmeyi iki kat artırır. Bu nedenle, yakınlaştırma düzeyi 1 olduğunda harita, 2x2 karo ızgarası veya 2. yakınlaştırma düzeyinde 4x4 ızgara, 3. yakınlaştırma düzeyinde 8x8 boyutlu bir ızgara vb. olarak oluşturulur. Karo katmanı için resim oluşturuyorsanız desteklemek istediğiniz her yakınlaştırma düzeyinde her parça için 256x256 nokta boyutunda yeni bir resim oluşturmanız gerekir.
Karo Katmanı Ekleme
- Bir
GMSURLTileLayer
nesnesini veyaGMSTileLayer
/GMSSyncTileLayer
özel alt sınıfını somutlaştırın. - İsteğe bağlı olarak
zIndex
özelliğini, diğer döşeme katmanlarına göre konumunu ayarlamak için değiştirin. map
özelliğini ayarlayarakGMSTileLayer
nesnesini haritaya atayın.
iOS için Haritalar SDK'sı, bir karo katmanı uygulamak için kullanılabilecek üç sınıf sağlar. Her sınıfta, belirli bir {x,y,zoom}
koordinat kümesi için doğru harita parçasının nasıl getirileceğini tanımlamanız gerekir. Mevcut seçenekler şunlardır:
UIImage
örnekleri döndürentileForX:y:zoom
uygulamasının uygulanmasını sağlayanGMSSyncTileLayer
alt sınıfı.GMSTileLayer
alt sınıfı, daha sonra bir parça görüntüsüyle geri çağıran eşzamansızrequestTileForX:y:zoom
yönteminin uygulanmasını sağlar.- Mevcut
GMSURLTileLayer
sınıfını kullanarak, blokları URL'lerden otomatik olarak getirin veGMSTileURLConstructor
engellemesini sağlayın.GMSURLTileLayer
, alt sınıflandırılmamış bir somut sınıftır.
GMSSyncTileLayer
veya GMSTileLayer
alt sınıflandırması söz konusu olduğunda, nil
karo sonucu sağlamak, iOS için Haritalar SDK'sına verilerin şu anda kullanılamadığını, ancak gelecekte kullanılabilir olabileceğini bildirir. Alternatif olarak, bu konumda hiç karo olmadığını belirtmek için kGMSTileLayerNoTile
döndürün.
GMSURLTileLayer
için GMSTileURLConstructor
değerinden nil
döndürülmesi, bu konumda hiç karo olmadığını belirtir.
URL'lerden blok almak için "GMSURLTileLayer" kullanma
GMSURLTileLayer
, alt sınıflandırma gerektirmez ancak GMSTileURLConstructor
blokunu 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;
Kartları UIImage
olarak sunmak için GMSSyncTileLayer
alt sınıfını kullanın
GMSSyncTileLayer
ve GMSTileLayer
, alt sınıflandırılmak üzere tasarlanmış soyut sınıflardır. Kartları UIImage
olarak sunmak için bu sınıfları kullanabilirsiniz. Aşağıdaki örnekte, GMSSyncTileLayer
alt sınıfı kullanılarak haritadaki bazı parçalar üzerinde nasıl özel bir resim 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 somutlaştırın 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 Parçalar
tileSize
değerini 512 yaparak yüksek DPI'ya sahip resimleri GMSSyncTileLayer
veya GMSURLTileLayer
ile kullanabilirsiniz.
tileSize
özelliği, döndürülen karo görsellerinin görüntülemeyi tercih edeceği piksel sayısını belirtir. Bu varsayılan değer, Retina olmayan bir cihazdaki Google Haritalar parçasının boyutu olan 256'dı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 daha büyük hale getirmenin, özellikle ince çizgiler veya metinler için resim kalitesini düşürebileceğini unutmayın. En iyi sonuçlar için tileSize
ve görüntü DPI'sını ekranla eşleştirin. Retina cihazda gösterilen haritalar,
tileSize
değeri 512 olan yüksek DPI'lı resimler görüntülenirken
en iyi şekilde görünürken, Retina olmayan bir cihazda
gösterilen haritalar normal resimlerle
ve varsayılan tileSize
değeri 256'yla harika görünür.
Eski karolar temizleniyor
Katman tarafından sağlanan parçalar "eski" hale gelirse yenilemeye zorlamak 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];