Zemin yer paylaşımları

Platform seçin: Android iOS JavaScript

Zemin yer paylaşımları, enlem/boylam koordinatlarına bağlı Görüntü Bindirmeleridir. Bu nedenle, haritayı sürüklediğinizde veya yakınlaştırdığınızda hareket ederler.

Kod örnekleri

GitHub'daki ApiDemos deposu, yer üstü katmanlarını gösteren bir örnek içerir:

Giriş

Zemin yer paylaşımı, haritaya sabitlenmiş bir resimdir. İşaretçilerin aksine, yer bindirmeleri ekrana göre değil, Dünya yüzeyine göre yönlendirilir. Bu nedenle, haritayı döndürmek, eğmek veya yakınlaştırmak görüntünün yönünü değiştirir. Zemin yer paylaşımları, haritadaki bir alana tek bir resim yerleştirmek istediğinizde kullanışlıdır. Haritanın büyük bir bölümünü kaplayan kapsamlı görüntüler eklemek istiyorsanız döşeme yerleşimi kullanmayı düşünebilirsiniz.

Yer paylaşımı ekleme

GroundOverlay eklemek için hem resmi hem de konumu tanımlayan bir GroundOverlayOptions nesnesi oluşturun. İsteğe bağlı olarak, resmin haritadaki konumunu etkileyecek ek ayarlar belirtebilirsiniz. Gerekli seçenekleri tanımladıktan sonra, resmi haritaya eklemek için nesneyi GoogleMap.addGroundOverlay() yöntemine iletin. addGroundOverlay() yöntemi bir GroundOverlay nesnesi döndürür. Bu nesneyi daha sonra değiştirmek isterseniz nesneye referans vermeye devam etmeniz gerekir.

Adım adım:

  1. Yeni bir GroundOverlayOptions nesnesi oluşturun
  2. Resmi BitmapDescriptor olarak belirtin.
  3. Mevcut yöntemlerden birini kullanarak resmin konumunu ayarlayın:
    • position(LatLng location, float width, float height)
    • position(LatLng location, float width)
    • positionFromBounds(LatLngBounds bounds)
  4. transparency gibi isteğe bağlı özellikleri dilediğiniz gibi ayarlayın.
  5. Resmi haritaya eklemek için GoogleMap.addGroundOverlay() yöntemini çağırın.

Aşağıdaki örnekte, mevcut bir GoogleMap nesnesine yer paylaşımı nasıl ekleneceği gösterilmektedir.

Kotlin

val newarkLatLng = LatLng(40.714086, -74.228697)
val newarkMap = GroundOverlayOptions()
    .image(BitmapDescriptorFactory.fromResource(R.drawable.newark_nj_1922))
    .position(newarkLatLng, 8600f, 6500f)
map.addGroundOverlay(newarkMap)

      

Java

LatLng newarkLatLng = new LatLng(40.714086, -74.228697);

GroundOverlayOptions newarkMap = new GroundOverlayOptions()
    .image(BitmapDescriptorFactory.fromResource(R.drawable.newark_nj_1922))
    .position(newarkLatLng, 8600f, 6500f);
map.addGroundOverlay(newarkMap);

      

Haritaya eklediğiniz bir yer yer paylaşımını değiştirmek veya kaldırmak istiyorsanız GroundOverlay nesnesini sakladığınızdan emin olun. Bu nesnede değişiklik yaparak yer paylaşımını daha sonra değiştirebilirsiniz.

Kotlin

// Add an overlay to the map, retaining a handle to the GroundOverlay object.
val imageOverlay = map.addGroundOverlay(newarkMap)
imageOverlay?.let {
    val isClickable = it.isClickable
    val isVisible = it.isVisible
    val bearing = it.bearing
    val transparency = it.transparency
    val zIndex = it.zIndex
    val position = it.position
    val width = it.width
    val height = it.height
}

      

Java

// Add an overlay to the map, retaining a handle to the GroundOverlay object.
GroundOverlay imageOverlay = map.addGroundOverlay(newarkMap);

      

Yer paylaşımını kaldırma

Yer paylaşımını GroundOverlay.remove() yöntemiyle kaldırabilirsiniz.

Kotlin

imageOverlay?.remove()

      

Java

imageOverlay.remove();

      

Katmanı değiştirme

Yer paylaşımı resmini, haritaya GroundOverlay.setImage(BitmapDescriptor) yöntemiyle ekledikten sonra değiştirebilirsiniz.

Kotlin

// Update the GroundOverlay with a new image of the same dimension
imageOverlay?.setImage(BitmapDescriptorFactory.fromResource(R.drawable.newark_nj_1922))

      

Java

// Update the GroundOverlay with a new image of the same dimension
imageOverlay.setImage(BitmapDescriptorFactory.fromResource(R.drawable.newark_nj_1922));

      

setImage() yöntemi, mevcut resmi aynı boyutlarda başka bir resimle değiştirir.

Zemin yer paylaşımını konumlandırma

Yer paylaşımının konumunu belirtmenin iki yolu vardır:

  • Yer paylaşımını ortalamak için LatLng, resmin boyutunu belirtmek için metre cinsinden boyutlar kullanılır.
  • Resmin kuzeydoğu ve güneybatı köşelerini belirtmek için LatLngBounds kullanma.

Haritaya eklenmeden önce yer yer paylaşımının konumunu belirtmeniz gerekir.

Resmi konumlandırmak için konumu kullanma

Resmi eklerken, sabitleyicinin sabitleneceği bir LatLng ve yer paylaşımının genişliğini (metre cinsinden) belirtirsiniz. anchor varsayılan olarak resmin ortasına yerleştirilir. İsteğe bağlı olarak, yer paylaşımının yüksekliğini (metre cinsinden) belirtebilirsiniz. Yer paylaşımının yüksekliğini sağlamazsanız resmin oranlarını korumak için otomatik olarak hesaplanır.

Aşağıdaki kod, 40.714086, -74.228697 konumuna 8,6 km genişliğinde ve 6,5 km yüksekliğinde bir resim yerleştirir. Resim sol alt tarafa sabitlenmiştir.

Kotlin

val newarkMap = GroundOverlayOptions()
    .image(BitmapDescriptorFactory.fromResource(R.drawable.newark_nj_1922))
    .anchor(0f, 1f)
    .position(LatLng(40.714086, -74.228697), 8600f, 6500f)

      

Java

GroundOverlayOptions newarkMap = new GroundOverlayOptions()
    .image(BitmapDescriptorFactory.fromResource(R.drawable.newark_nj_1922))
    .anchor(0, 1)
    .position(new LatLng(40.714086, -74.228697), 8600f, 6500f);

      

Resim konumlandırmak için LatLngBounds kullanma

Resmi içeren bir LatLngBounds sağlarsınız. LatLngBounds, resmin kuzeydoğu ve güneybatı köşelerini ayarlar. Haritada çizilen resim, sınırlara sığacak şekilde döndürülür. Sınırlar orijinal en boy oranıyla eşleşmiyorsa resim eğrilir.

Aşağıdaki kod, haritaya güneybatı köşesi 40.712216,-74.22655 ve kuzeydoğu köşesi 40.773941, -74.12544 ile sınırlı bir resim yerleştirir.

Kotlin

val newarkBounds = LatLngBounds(
    LatLng(40.712216, -74.22655),  // South west corner
    LatLng(40.773941, -74.12544)   // North east corner
)
val newarkMap = GroundOverlayOptions()
    .image(BitmapDescriptorFactory.fromResource(R.drawable.newark_nj_1922))
    .positionFromBounds(newarkBounds)

      

Java

LatLngBounds newarkBounds = new LatLngBounds(
    new LatLng(40.712216, -74.22655),       // South west corner
    new LatLng(40.773941, -74.12544));      // North east corner
GroundOverlayOptions newarkMap = new GroundOverlayOptions()
    .image(BitmapDescriptorFactory.fromResource(R.drawable.newark_nj_1922))
    .positionFromBounds(newarkBounds);

      

Verileri yer üstü yer paylaşımıyla ilişkilendirme

Bir yer paylaşımıyla rastgele bir veri nesnesi depolamak için GroundOverlay.setTag() işlevini çağırabilir ve GroundOverlay.getTag() işlevini kullanarak veri nesnesini alabilirsiniz.

Aşağıdaki kod örneğinde, yer üstü katmanıyla birlikte bir dize açıklaması depolanmaktadır:

Kotlin

val sydneyGroundOverlay = map.addGroundOverlay(
    GroundOverlayOptions()
        .image(BitmapDescriptorFactory.fromResource(R.drawable.harbour_bridge))
        .position(LatLng(-33.873, 151.206), 100f)
        .clickable(true)
)
sydneyGroundOverlay?.tag = "Sydney"

      

Java

GroundOverlay sydneyGroundOverlay = map.addGroundOverlay(new GroundOverlayOptions()
    .image(BitmapDescriptorFactory.fromResource(R.drawable.harbour_bridge))
    .position(new LatLng(-33.873, 151.206), 100)
    .clickable(true));

sydneyGroundOverlay.setTag("Sydney");

      

Zemin yer paylaşımlarıyla veri depolamanın ve almanın yararlı olduğu senaryolara dair bazı örnekler:

  • Uygulamanız farklı yer üstü katmanları için uygun olabilir ve kullanıcı tıkladığında bunları farklı şekilde ele almak isteyebilirsiniz.
  • Benzersiz kayıt tanımlayıcılarına sahip bir sistemle arayüz oluşturuyor olabilirsiniz. Bu durumda, yer paylaşımları söz konusu sistemdeki belirli kayıtları temsil eder.
  • Yer paylaşımı verileri, yer paylaşımının z-indeksini belirlemek için öncelik gösterebilir.

Yer yer paylaşımı etkinliklerini işleme

Varsayılan olarak, yer paylaşımları tıklanamaz. GroundOverlay.setClickable(boolean) işlevini çağırarak tıklanabilirliği etkinleştirebilir ve devre dışı bırakabilirsiniz.

Tıklanabilir bir yer yer paylaşımındaki tıklama etkinliklerini dinlemek için OnGroundOverlayClickListener kullanın. Bu dinleyiciyi haritada ayarlamak için GoogleMap.setOnGroundOverlayClickListener(OnGroundOverlayClickListener) işlevini çağırın. Kullanıcı bir zemin yer paylaşımını tıkladığında onGroundOverlayClick(GroundOverlay) geri çağırma işlevi alırsınız.