Haritanızın üzerine bir Karo Katmanı olarak resim ekleyebilirsiniz. Karo Katmanları, harita karosunun üzerine belirli bir yakınlaştırma düzeyinde yerleştirilir. Yeterli sayıda karoyla, Google'ın harita verilerini tüm harita için birden fazla yakınlaştırma düzeyinde tamamlayabilirsiniz.
Giriş
Karo katmanları (Bazen Karo Yer Paylaşımları da denir), görüntüleri Google'ın temel harita karolarının üzerine yerleştirmenize olanak tanır. Bu, önemli yerler veya trafik bilgileri gibi verileri
ve yerel görüntüleri uygulamanıza eklemenin mükemmel bir yoludur. kGMSTypeNone
harita türüyle birleştirildiğinde, karo katmanları, Google'ın temel harita verilerini etkili bir şekilde kendi verilerinizle değiştirmenize olanak tanır.
Karo katmanları, haritaya genellikle büyük coğrafi alanları kapsayan kapsamlı görüntüler eklemek istediğinizde kullanışlıdır. Bunun aksine, yer örtüleri, harita üzerinde bir noktadaki tek bir resmi düzeltmek istediğinizde kullanışlıdır.
Parça koordinatları
Maps API, her yakınlaştırma düzeyindeki görüntüleri, sıralı bir ızgara düzeninde düzenlenmiş kare harita parçalarına ayırır. Bir harita kayarak yeni bir konuma veya yeni bir yakınlaştırma düzeyine geçtiğinde, Haritalar API'si hangi kartların gerektiğini belirler ve bunu alınması için bir dizi karoya dönüştürür.
Google'ın Mercator projeksiyonunu uygulaması için (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 karoya bölündüğünde her kutu benzersiz bir x,y
çiftiyle referans verilebilir:
Her bir harita parçası, 256x256 noktalı bir karedir. Zum düzeyi 0'da, tüm dünya tek bir karo içinde görüntülenir. Her yakınlaştırma düzeyi, büyütmeyi iki kat artırır. Böylece, yakınlaştırma düzeyinde 1 harita, 2x2 karo ızgarası veya 2. yakınlaştırma düzeyinde 4x4 ızgara, 3. yakınlaştırma düzeyinde 8x8 ızgara vb. olarak görüntülenir. Karo katmanı için resimler oluşturuyorsanız desteklemek istediğiniz her yakınlaştırma düzeyinde her parça için 256x256 nokta resmi oluşturmanız gerekir.
Karo Katmanı Ekleme
- Bir
GMSURLTileLayer
nesnesi veyaGMSTileLayer
/GMSSyncTileLayer
özel alt sınıfı için örnek oluşturun. - İsteğe bağlı olarak
zIndex
özelliğini değiştirerek diğer karo katmanlarına göre konumunu ayarlayın. map
özelliğini ayarlayarakGMSTileLayer
nesnesini haritaya atayın.
iOS için Haritalar SDK'sı, bir karo katmanını 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. Kullanılabilir seçenekler şunlardır:
UIImage
örnekleri döndürentileForX:y:zoom
uygulamasının uygulanmasını sağlayanGMSSyncTileLayer
alt sınıfı.- Daha sonra parça resmiyle geri çağıran eşzamansız
requestTileForX:y:zoom
yönteminin uygulanmasını sağlayanGMSTileLayer
alt sınıfı. - Karoları URL'lerden otomatik olarak getirmek için mevcut
GMSURLTileLayer
sınıfını kullanın. BöyleceGMSTileURLConstructor
engellemesi sağlanır.GMSURLTileLayer
, alt sınıflandırılamayan somut bir sınıftır.
GMSSyncTileLayer
veya GMSTileLayer
alt sınıflandırma söz konusu olduğunda, bir nil
parça sonucu sağladığınızda iOS için Haritalar SDK'sı bu verinin şu anda kullanılamadığını ancak gelecekte kullanılabileceğini bildirir. Alternatif olarak, bu konumda hiç karo olmadığını belirtmek için kGMSTileLayerNoTile
döndürün.
GMSURLTileLayer
için GMSTileURLConstructor
öğesinden nil
döndürüldüğünde bu konumda karo bulunmadığı anlamına gelir.
URL'lerden karo almak için "GMSURLTiletier" 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;
Karoları UIImage
olarak yayınlamak için GMSSyncTileLayer
alt sınıfını oluşturun
GMSSyncTileLayer
ve GMSTileLayer
, alt sınıflandırılmak üzere tasarlanmış soyut sınıflardır. Kartları UIImage
olarak yayınlamak için bu sınıfları kullanabilirsiniz. Aşağıdaki örnekte, GMSSyncTileLayer
alt sınıfı kullanılarak haritadaki bazı karolar ü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 örnekleyin 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 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. Varsayılan olarak 256 piksel (retina olmayan bir cihazdaki Google Haritalar blokunun boyutu) ayarlanır.
Yüksek DPI'lı bir cihazda normal DPI karoları görüntülüyorsanız tileSize
değerini 512'ye ayarlayarak resimleri ölçeklendirebilirsiniz. Resimleri ölçeklendirmenin, özellikle ince çizgiler veya metinlerde 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. Bir Retina cihazda gösterilen haritalar,
tileSize
512 piksellik yüksek DPI'lı resimler görüntülenirken en iyi
görünürken, Retina olmayan bir cihazda gösterilen haritalar normal
resimlerle ve varsayılan tileSize
değeri olan 256'yla
mükemmel görünür.
Eski karoları temizleme
Katman tarafından sağlanan karolar "eski" hale gelirse yenilemeyi 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];