Yer Paylaşımları

Platform seçin: Android iOS JavaScript

Karo katmanı olarak da bilinen karo yer paylaşımı, temel harita desenlerinin en üstünde görüntülenir.

Kod Örnekleri

İlgili içeriği oluşturmak için kullanılan GitHub'daki ApiDemos deposu, şunları gösteren bir örnek içerir: karo yer paylaşımı özelliği:

Giriş

CEVAP TileOverlay, bazı temel harita taşlarını oluşturabilirsiniz.

Desteklemek istediğiniz her yakınlaştırma düzeyi için blokları sağlamanız gerekir. Birden çok yakınlaştırma düzeyinde yeterli sayıda kutunuz varsa, Google'ın harita verileri oluşturabilirsiniz.

Karo yer paylaşımları haritaya kapsamlı görüntüler eklemek istediğinizde, genelde geniş coğrafi alanları kapsar. Öte yandan zemin bindirme haritadaki bir alandaki tek bir resmi düzeltmek istediğinizde kullanışlıdır.

Ayrıca, haritaya ekstra özellikler eklemek için şeffaf karo yer paylaşımlarını kullanabilir, programlı olarak veya öğe yer paylaşımı için bir şeffaflık faktörü ayarlayarak şeffaf karo resimler sağlar.

Parça koordinatları ve yakınlaştırma seviyeleri

Google Maps API, her yakınlaştırma seviyesindeki görüntüleri bir dizi ızgara düzeninde düzenlenmiş kare harita desenleri. Bir harita yeni bir konuma taşındığında veya yeni bir yakınlaştırma düzeyine getirildiğinde, Maps API, hangi kartların gerekli olduğunu belirler ve bu bilgileri, alınabilecek bir dizi karoya dönüştürür.

Koordinatlı karo (0,0) her zaman haritanın kuzeybatı köşesindedir, x değerleri batıdan doğuya doğru artmakta ve y değerleri kuzeyden artmaktadır güneye dönelim. Parçalar, söz konusu kaynaktan x, y koordinatları kullanılarak dizine eklenir.

Yakınlaştırma düzeyi 0 olduğunda, tüm dünya tek bir parça halinde oluşturulur. Her bir yakınlaştırma seviyesi, büyütmeyi iki kat artırır. Dolayısıyla, 1. yakınlaştırma düzeyinde harita 2x2 karo ızgarası olarak oluşturulur. 2. yakınlaştırma düzeyinde, 4x4 boyutunda bir ızgaradır. Yakınlaştırma düzeyi 3 olduğunda, bu 8x8 boyutunda bir ızgaradır ve bu şekilde devam eder.

Örneğin, yakınlaştırma seviyesi 2 olduğunda dünya 16 karoya bölünür. Her kutu x, y ve zum'un benzersiz bir kombinasyonuyla referans alınabilir:

Dört satır ve dört karo sütununa bölünmüş dünya haritası.

Bir karo katmanı için resim oluştururken, Döşeme her zum seviyesindeki kareleri göreceksiniz. Google Haritalar hedefleri Karolar gösterilirken 256 dp (cihazdan bağımsız pikseller). Yüksek çözünürlük için cihazlarda yüksek dpi'ye sahip karolar (512x512 piksel) döndürmeniz önerilir. Öner değerini Android Farklı ekranları desteklemeyle ilgili bilgiler için geliştirici belgelerini ve yoğunlukları olabilir.

Not: Kameranın desteklediği yakınlaştırma düzeyleri çeşitli faktörlere bağlıdır: ve karolarınızın destekleyebileceği yakınlaştırma düzeyleriyle alakalı değildir.

  1. GoogleMap.getMaxZoomLevel(), maksimum yakınlaştırma seviyesini döndürür mevcut kamera konumunda kullanılabilir. Bu işlem, haritayı ve şu anda kullanılıyor. Örneğin, bir uydu ya da arazi haritasında temel harita parçalarından daha düşük bir maksimum yakınlaştırma seviyesi.
  2. GoogleMap.getMinZoomLevel() minimum yakınlaştırma düzeyini döndürür. Bu, her konum için aynıdır (maksimum yakınlaştırma düzeyinden farklı olarak) ancak cihaza ve harita boyutlarına göre değişiklik gösterebilir.

Karo yer paylaşımı ekle

Karo yer paylaşımı oluşturmanın en basit ve en yaygın yolu ilgili karo resmini gösteren URL. UrlTileProvider, TileProvider Bu sınıfı, tüm resimlerin aynı boyutlara sahip olmasını gerektirir.

UrlTileProvider.getTileUrl() uygulamanız gerekiyor. karo koordinatlarını (x, y, zum) kabul eder ve bir resim görürsünüz. Herhangi bir değer yoksa yöntem null değerini döndürmelidir ilgili karolara dokunun. URL bir web kaynağına işaret edebilir, Android öğesi veya yerel diskteki bir dosya.

Karo resim stoklarınızı bir sunucuda oluşturun; tüm x, y için tanımlanmış koordinatlarını ve yakınlaştırma düzeylerini değiştirebilirsiniz. Ardından karoyu ekleyin yer paylaşımı:

  1. Bir Karo resimlerini sağlamak için UrlTileProvider.
  2. Her karo için URL'yi oluşturmak üzere getTileUrl() değerini geçersiz kılın görüntüsüdür.
  3. Lütfen İlgili seçeneklere sahip TileOverlayOptions nesnesi:
    • fadeIn: Boole. Karoların solgun olup olmayacağını belirtir inç Varsayılan değer true değeridir. Bu bilgileri proje boyunca Karo yer paylaşımları arasında hızlı geçiş yaparken kararma özelliğini kapatır. Örneğin, şeffaflık ve belirme arasındaki ilişki hakkında bilgi edinmek için şeffaflık ile ilgili bölümünü inceleyebilirsiniz.
    • tileProvider: Şunun için kullanılacak TileProvider: kullanabilirsiniz.
    • transparency: Kayan. Şunun için şeffaflık faktörü ayarlar: karo resimleri. Değer [0.0f, 1.0f] aralığında olmalıdır Burada 0.0f, tamamen opak (varsayılan) ve 1.0f anlamına gelir. tamamen şeffaf olmasını ifade eder. Bu bölümde, transparency (şeffaflık) ve arasındaki ilişkiyi konuşacağız.
    • visible: Boole. Karonun görünürlüğünü belirtir kullanabilirsiniz. Görünmez karo yer paylaşımı (false değeri) ancak diğer tüm özelliklerini korur. Varsayılan true.
    • zIndex: Döşemenin yer paylaşımlı sıralamayı belirler şunlar da dahil olmak üzere, diğer yer paylaşımları zemin bindirme , daireler, çoklu çizgiler ve poligonlar. Z-endeksi daha yüksek olan bindirmeler, bunların üzerine çizilir Z-endeksleri vardır. Aynı Z-endeksine sahip yer paylaşımlarının sırası isteğe bağlıdır. Varsayılan Z-endeksi 0'dır. Lütfen işaretçiler diğer yer paylaşımlarının z-endeksinden bağımsız olarak her zaman kullanır.
  4. Telefonla arama GoogleMap.addTileOverlay() haritası.

Kotlin

private lateinit var map: GoogleMap

var tileProvider: TileProvider = object : UrlTileProvider(256, 256) {
    override fun getTileUrl(x: Int, y: Int, zoom: Int): URL? {

        /* Define the URL pattern for the tile images */
        val url = "http://my.image.server/images/$zoom/$x/$y.png"
        return if (!checkTileExists(x, y, zoom)) {
            null
        } else try {
            URL(url)
        } catch (e: MalformedURLException) {
            throw AssertionError(e)
        }
    }

    /*
     * Check that the tile server supports the requested x, y and zoom.
     * Complete this stub according to the tile range you support.
     * If you support a limited range of tiles at different zoom levels, then you
     * need to define the supported x, y range at each zoom level.
     */
    private fun checkTileExists(x: Int, y: Int, zoom: Int): Boolean {
        val minZoom = 12
        val maxZoom = 16
        return zoom in minZoom..maxZoom
    }
}

val tileOverlay = map.addTileOverlay(
    TileOverlayOptions()
        .tileProvider(tileProvider)
)

      

Java

private GoogleMap map;

TileProvider tileProvider = new UrlTileProvider(256, 256) {

    @Override
    public URL getTileUrl(int x, int y, int zoom) {

        /* Define the URL pattern for the tile images */
        String s = String.format("http://my.image.server/images/%d/%d/%d.png", zoom, x, y);

        if (!checkTileExists(x, y, zoom)) {
            return null;
        }

        try {
            return new URL(s);
        } catch (MalformedURLException e) {
            throw new AssertionError(e);
        }
    }

    /*
     * Check that the tile server supports the requested x, y and zoom.
     * Complete this stub according to the tile range you support.
     * If you support a limited range of tiles at different zoom levels, then you
     * need to define the supported x, y range at each zoom level.
     */
    private boolean checkTileExists(int x, int y, int zoom) {
        int minZoom = 12;
        int maxZoom = 16;

        return (zoom >= minZoom && zoom <= maxZoom);
    }
};

TileOverlay tileOverlay = map.addTileOverlay(new TileOverlayOptions()
    .tileProvider(tileProvider));

      

UrlTileProvider kullanımıyla ilgili bir örnek görmek için TileOverlayDemoActivity örnek kod Google Play Hizmetleri SDK'sı ile birlikte sunulan uygulama içi bir programdır.

Karo yer paylaşımları için şeffaflığı ayarlama

Haritanın üzerine şeffaf bloklar yerleştirmek, kullanıcıların yer paylaşımlı karoların altındaki temel haritaya bakın. Bunu yapmak için şeffaf karolara sahip olabilir veya karo yer paylaşımında bir şeffaflık faktörü ayarlayarak daha fazla bilgi edindiniz.

Aşağıdaki kod örneği, karo yer paylaşımının şeffaflığını açar/kapatır 0.5f ile 0.0f arasında:

Kotlin

private var tileOverlayTransparent: TileOverlay? = null

override fun onMapReady(map: GoogleMap) {
    tileOverlayTransparent = map.addTileOverlay(
        TileOverlayOptions()
            .tileProvider(object : UrlTileProvider(256, 256) {
                // ...
            })
            .transparency(0.5f)
    )
}

// Switch between 0.0f and 0.5f transparency.
fun toggleTileOverlayTransparency() {
    tileOverlayTransparent?.let {
        it.transparency = 0.5f - it.transparency
    }
}

      

Java

private TileOverlay tileOverlayTransparent;

@Override
public void onMapReady(GoogleMap map) {
    tileOverlayTransparent = map.addTileOverlay(new TileOverlayOptions()
        .tileProvider(new UrlTileProvider(256, 256) {
            // ...
        })
        .transparency(0.5f));
}

// Switch between 0.0f and 0.5f transparency.
public void toggleTileOverlayTransparency() {
    if (tileOverlayTransparent != null) {
        tileOverlayTransparent.setTransparency(0.5f - tileOverlayTransparent.getTransparency());
    }
}

      

Şeffaflık, öğe için alfa kanalı çarpanı olarak uygulanır resim. Karo yer paylaşımının şeffaflığını ayarlamak için transparency içeren TileOverlayOptions nesnesi yukarıdaki örnekte gösterildiği gibi [0.0f, 1.0f] aralığındadır. Değer 0.0f değeri, karo yer paylaşımının tamamen opak olduğu ve 1.0f, sayfanın tamamen şeffaf olduğu anlamına gelir. Varsayılan değer: 0.0f (opak).

Karo yer paylaşımının şeffaflığına şunları çağırarak erişebilirsiniz: TileOverlay.getTransparency(), şu numarayı arayarak değiştirebilirsiniz: TileOverlay.setTransparency().

Şeffaflık, animasyon ve karartma

Şeffaflık değiştirildiğinde animasyon gösterilmez. Şeffaflık seçeneğinin yanında fadeIn seçeneğini belirleyin.

Karo yüklendikten sonra, şeffaf hale gelme animasyonu sağlar. Bir şeffaflık değerinde, karolar tamamen şeffaftan tanımlanan değere geçiş yaparak şeffaflık değeri. Kararma sırasında şeffaflığı değiştirirseniz animasyonu yeni hedef şeffaflığına doğru devam eder.

Karo yer paylaşımını kaldırma

Bir karo yer paylaşımını TileOverlay.remove() yöntemini çağırın.

Kotlin

tileOverlay?.remove()

      

Java

tileOverlay.remove();

      

Eski karoları temizle

Karo yer paylaşımı tarafından sağlanan karolar 'eski' olursa Yenilemeyi zorlamak için clearTileCache(). Bu da tüm proje yöneticilerinin bu yer paylaşımındaki karolar yeniden yüklenecek. Örneğin, TileProvider değişikliğinden sonra, clearTileCache() sonra önceki karoların artık oluşturulmuyor.

Kotlin

tileOverlay?.clearTileCache()

      

Java

tileOverlay.clearTileCache();