Zemin yer paylaşımları

Platform seçin: Android iOS JavaScript

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

Kod örnekleri

GitHub'daki ApiDemos deposu, yer yer paylaşımlarını gösteren bir örnek içerir:

Giriş

Yer kaplaması, bir haritaya sabitlenmiş bir resimdir. İşaretçilerden farklı olarak zemin yer paylaşımları ekran yerine Dünya'nın yüzeyine göre yönlendirilir. Bu nedenle, haritayı döndürmek, eğmek veya yakınlaştırmak resmin yönünü değiştirir. Zemin yer paylaşımları, haritanın tek bir alanındaki tek bir resmi düzeltmek istediğinizde kullanışlıdır. Haritanın büyük bir bölümünü kapsayan kapsamlı görüntüler eklemek istiyorsanız Kart yer paylaşımı kullanabilirsiniz.

Yer paylaşımı ekleme

GroundOverlay eklemek için hem bir resmi hem de konumu tanımlayan bir GroundOverlayOptions nesnesi oluşturun. İsterseniz resmin haritada konumlandırılmasını etkileyecek ek ayarlar da 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. Daha sonra değiştirmek isterseniz bu nesnenin referansını tutmanız gerekir.

Adım adım:

  1. Yeni bir GroundOverlayOptions nesnesi oluşturma
  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 istediğiniz gibi ayarlayın.
  5. Resmi haritaya eklemek için GoogleMap.addGroundOverlay()'ü arayın.

Aşağıdaki örnekte, mevcut bir GoogleMap nesnesine nasıl zemin yer paylaşımı 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);

      

Bir yer kaplamasını haritaya ekledikten sonra değiştirmek veya kaldırmak isterseniz GroundOverlay nesnesini tutmaya devam edin. 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)

      

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

GroundOverlay.remove() yöntemini kullanarak bir yer yer paylaşımını kaldırabilirsiniz.

Kotlin

imageOverlay?.remove()

      

Java

imageOverlay.remove();

      

Yer paylaşımlı reklamı değiştirme

Haritaya eklendikten sonra zemin yer paylaşımı resmini GroundOverlay.setImage(BitmapDescriptor) yöntemiyle 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ı boyutlara sahip başka bir resimle değiştirir.

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

Yer kaplamasının konumunu belirtmenin iki yolu vardır:

  • Yer paylaşımını merkezlemek için LatLng ve resmin boyutunu belirtmek için metre cinsinden boyutlar kullanın.
  • Resmin kuzeydoğu ve güney batı köşelerini belirtmek için LatLngBounds kullanma

Zemin yer paylaşımı haritaya eklenmeden önce konumunu belirtmeniz gerekir.

Resmi konumlandırmak için konumu kullanma

Resmi eklerken ankrajın sabitleneceği bir LatLng ve yer paylaşımının genişliğini (metre cinsinden) belirtirsiniz. anchor varsayılan olarak resmin ortasına ayarlanır. İ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 yükseklik, 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 alta sabitlendi.

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);

      

Bir resmi konumlandırmak için LatLngBounds kullanma

Resmi içeren bir LatLngBounds sağlarsınız. LatLngBounds, resmin kuzeydoğu ve güney batı köşelerini ayarlar. Görüntü haritaya çizilirken sınırlara sığacak şekilde döndürülür. Sınırlar orijinal en boy oranıyla eşleşmezse resim eğik olur.

Aşağıdaki kod, haritaya güney batı köşesi 40.712216,-74.22655, kuzeydoğu köşesi 40.773941, -74.12544 olacak şekilde 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 zemin yer paylaşımıyla ilişkilendirme

Yer kaplaması içeren rastgele bir veri nesnesini depolamak için GroundOverlay.setTag()'i çağırabilir ve GroundOverlay.getTag() kullanarak veri nesnesini alabilirsiniz.

Aşağıdaki kod örneği, zemin yer paylaşımı içeren bir dize açıklaması depolar:

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");

      

Aşağıda, zemin yer paylaşımlarıyla veri depolamak ve almak için yararlı olan bazı senaryo örnekleri verilmiştir:

  • Uygulamanız farklı zemin yer paylaşımlarını destekleyebilir ve kullanıcı bunları tıkladığında farklı şekilde işlemek isteyebilirsiniz.
  • Benzersiz kayıt tanımlayıcıları olan bir sistemle çalışıyor olabilirsiniz. Bu sistemde yer paylaşımları, sistemdeki belirli kayıtları temsil eder.
  • Yer paylaşımı verileri, yer paylaşımının z-dizinini belirlemek için bir öncelik belirtebilir.

Yer kaplaması etkinliklerini işleme

Yer kaplamaları varsayılan olarak tıklanabilir değildir. 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) numaralı telefonu arayın. Kullanıcı bir yer yer paylaşımını tıkladığında onGroundOverlayClick(GroundOverlay) geri çağırma alırsınız.