Zemin Bindirmeleri

Platform seçin: Android iOS JavaScript

Zemin bindirmeleri, enlem/boylam koordinatlarına bağlı olan görüntü bindirmeleridir. Böylece haritayı sürüklediğinizde veya yakınlaştırdığınızda hareket ederler.

Kod örnekleri

GitHub'daki ApiDemos deposu, zemin bindirmelerini gösteren bir örnek içerir:

Giriş

Zemin bindirme, haritaya sabitlenmiş bir görüntüdür. İşaretçilerden farklı olarak, zemin bindirmeler ekran yerine Dünya'nın yüzeyine göre ayarlanır. Bu nedenle haritayı döndürmek, yatırmak veya yakınlaştırmak görüntünün yönünü değiştirir. Zemin bindirmeleri, haritadaki bir alandaki tek bir resmi düzeltmek 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 Karo yer paylaşımı kullanmayı düşünmelisiniz.

Bindirme ekle

GroundOverlay eklemek için hem resmi hem de konumu tanımlayan bir GroundOverlayOptions nesnesi oluşturun. İsteğe bağlı olarak, resmin haritadaki konumlandırmasını etkileyecek ek ayarlar belirtebilirsiniz. Gerekli seçenekleri tanımladıktan sonra, görüntüyü 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 nesneye ilişkin bir referansı saklamanız gerekir.

Adım adım:

  1. Yeni bir GroundOverlayOptions nesnesi gösterin
  2. Resmi BitmapDescriptor olarak belirtin.
  3. Resmin konumunu, mevcut yöntemlerden birini kullanarak 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() numaralı telefonu arayın.

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

      

Bir zemin bindirmesini haritaya ekledikten sonra değiştirmek veya kaldırmak isterseniz GroundOverlay nesnesini tuttuğunuzdan emin olun. Daha sonra bu nesnede değişiklik yaparak yer paylaşımını 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);

      

Bindirmeyi kaldırma

Zemin bindirmesini GroundOverlay.remove() yöntemiyle kaldırabilirsiniz.

Kotlin



imageOverlay?.remove()

      

Java


imageOverlay.remove();

      

Yer paylaşımını değiştirme

Haritaya eklendikten sonra GroundOverlay.setImage(BitmapDescriptor) yöntemini kullanarak zemin bindirme görüntüsünü değiştirebilirsiniz.

Kotlin



// Update the GroundOverlay with a new image of the same dimension

// 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ı boyutlardaki başka bir resimle değiştirir.

Zemin Bindirmesini Konumlandırma

Zemin bindirmenin konumunu belirtmenin iki yolu vardır:

  • Bindirmeyi ortalamak için LatLng ve resmin boyutunu belirtmek için metre cinsinden boyutlar kullanma.
  • Resmin kuzeydoğu ve güneybatı köşelerini belirtmek için LatLngBounds kullanma.

Zemin bindirmenin konumunu haritaya eklemeden önce belirtmeniz gerekir.

Resmi konumlandırmak için konumu kullanma

Resmi eklediğinizde, sabitlemenin sabitleneceği bir EnlBoy ve yer paylaşımının genişliğini (metre cinsinden) belirtirsiniz. anchor, varsayılan olarak resmin ortasına gelir. İ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, 8,6 km genişliğinde ve 6,5 km yüksekliğindeki bir resmi 40.714086, -74.228697 konumuna yerleştiriyor. Resim sol alta sabitlenir.

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'u kullanma

Resmi içeren bir LatLngBounds sağlarsınız. LatLngBounds, resmin kuzeydoğu ve güneybatı köşelerini belirler. Harita üzerinde çizilen resim, sınırlara uyacak şekilde döndürülür. Sınırlar orijinal en boy oranıyla eşleşmezse görüntü eğik olur.

Aşağıdaki kod, haritaya bir resmi, Güneybatı köşesi 40.712216,-74.22655 konumuna, Kuzeydoğu köşesi de 40.773941, -74.12544 adresine bağlı olacak şekilde 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 bindirmeyle ilişkilendirme

Yer paylaşımıyla rastgele bir veri nesnesini depolamak ve GroundOverlay.getTag() kullanarak veri nesnesini almak için GroundOverlay.setTag() yöntemini çağırabilirsiniz.

Aşağıdaki kod örneğinde, zemin bindirmeli bir dize açıklaması saklanı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");

      

Aşağıda, zemin bindirmeli verileri depolamanın ve almanın yararlı olduğu durumlarla ilgili bazı örnekler verilmiştir:

  • Uygulamanız farklı zemin bindirmelere uygun olabilir ve kullanıcı bunları tıkladığında farklı bir şekilde ele alınmak istersiniz.
  • Benzersiz kayıt tanımlayıcılarına sahip bir sistemle çalışıyor olabilirsiniz. Bu durumda yer paylaşımları bu sistemdeki belirli kayıtları temsil eder.
  • Bindirme verileri, yer paylaşımı için Z-endeksini belirleme önceliğini gösterebilir.

Yer bindirme etkinliklerini işleme

Varsayılan olarak, zemin bindirmeler tıklanamaz. GroundOverlay.setClickable(boolean) komutunu çağırarak tıklanabilirliği etkinleştirebilir ve devre dışı bırakabilirsiniz.

Tıklanabilir bir yer paylaşımı üzerindeki tıklama etkinliklerini dinlemek için OnGroundOverlayClickListener kullanın. Bu işleyiciyi haritaya ayarlamak için GoogleMap.setOnGroundOverlayClickListener(OnGroundOverlayClickListener) numaralı telefonu arayın. Kullanıcı, zemin yer paylaşımını tıkladığında onGroundOverlayClick(GroundOverlay) geri çağırma alırsınız.