Zemin Bindirmeleri

Platform seçin: Android iOS JavaScript

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

Kod örnekleri

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

Giriş

Zemin bindirmesi, bir haritaya sabitlenmiş bir görüntüdür. İşaretçilerden farklı olarak, yer bindirmeleri ekrana değil, Dünya yüzeyine odaklanır. Bu nedenle, haritayı döndürmek, eğmek veya yakınlaştırmak resmin yönünü değiştirir. Harita üzerindeki bir alanda tek bir resmi düzeltmek istediğinizde zemin bindirmeleri yararlı olabilir. Haritanın büyük bir bölümünü kapsayan kapsamlı görüntüler eklemek istiyorsanız Karo yer paylaşımı seçeneğini değerlendirmelisiniz.

Yer paylaşımı ekle

GroundOverlay eklemek için hem görüntü hem de konum 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, 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 istiyorsanız bu nesneye ilişkin referansı saklamanız gerekir.

Adım adım:

  1. Yeni bir GroundOverlayOptions nesnesini örneklendir
  2. Resmi bir BitmapDescriptor olarak belirtin.
  3. Aşağıdaki yöntemlerden birini kullanarak resmin konumunu ayarlayın:
    • position(LatLng location, float width, float height)
    • position(LatLng location, float width)
    • positionFromBounds(LatLngBounds bounds)
  4. İsteğe bağlı özellikleri (ör. transparency) 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 bindirmesinin 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 elinizde tuttuğunuzdan emin olun. Bindirmeyi daha sonra bu nesnede değişiklikler yaparak 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

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

Kotlin



imageOverlay?.remove()

      

Java


imageOverlay.remove();

      

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

Zemin bindirme görüntüsünü, haritaya eklendikten sonra GroundOverlay.setImage(BitmapDescriptor) yöntemiyle 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:

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

Zemin bindirmenin haritaya eklenmeden önce konumunu belirtmeniz gerekir.

Bir resmi konumlandırmak için konum kullan

Resmi eklerken, bağlayıcının sabitleneceği EnlBoy 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) sağlayabilirsiniz. Bindirmenin yüksekliğini belirtmezseniz, resmin oranlarını korumak için bu yükseklik 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. konuma 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 kullanın

Resmi içeren bir LatLngBounds sağlarsınız. LatLngBounds, resmin kuzeydoğu ve güneybatı köşelerini belirler. Resim harita üzerinde çizildiğinde sınırların sığması için döndürülür. Sınırlar orijinal en boy oranıyla eşleşmezse resim eğik hale gelir.

Aşağıdaki kodda, güneybatı köşesi 40.712216,-74.22655 ve Kuzeydoğu köşesi 40.773941, -74.12544 olacak şekilde haritaya yerleştirilmiş bir resim yer alır.

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 bindirmesiyle ilişkilendirin

Zemin bindirmesiyle rastgele bir veri nesnesi depolamak ve GroundOverlay.getTag() kullanarak veri nesnesini almak için GroundOverlay.setTag() yöntemini çağırabilirsiniz.

Aşağıdaki kod örneğinde, zemin yer paylaşımı içeren bir dize açıklaması depolanı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 bindirmeleriyle veri depolamanın ve almanın yararlı olduğu durumlara dair bazı örnekler verilmiştir:

  • Uygulamanızda farklı zemin bindirmeleri sunuluyor olabilir ve kullanıcı bunları tıkladığında farklı şekilde kullanmak isteyebilirsiniz.
  • Benzersiz kayıt tanımlayıcıları olan bir sistemle çalışıyor olabilirsiniz. Yer paylaşımları, 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 bindirmeleri tıklanamaz. GroundOverlay.setClickable(boolean) yöntemini çağırarak tıklanabilirliği etkinleştirebilir ve devre dışı bırakabilirsiniz.

Tıklanabilir zemin yer paylaşımında tıklama etkinliklerini dinlemek için OnGroundOverlayClickListener kullanın. Bu işleyiciyi haritada 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 işlemi alırsınız.