Zemin Bindirmeleri

Platformu 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 bindirme, bir haritaya sabitlenmiş resimdir. İşaretçilerden farklı olarak, zemin döşemeleri ekran yerine Dünya yüzeyine odaklanır. Bu yüzden, haritayı döndürmek, eğmek veya yakınlaştırmak resmin yönünü değiştirir. Yeryüzü bindirmeleri, haritadaki bir alanda 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 döşeme konusuna dikkat etmeniz gerekir.

Yer paylaşımı ekle

GroundOverlay eklemek için hem resim 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, resmi haritaya eklemek için nesneyi GoogleMap.addGroundOverlay() yöntemine geçirin. addGroundOverlay() yöntemi, bir GroundOverlay nesnesi döndürür. Daha sonra değiştirmek isterseniz bu nesneye referansta bulunmanız 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 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 yer paylaşımı ekleme işlemi gösterilmektedir.

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

      

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)

      

Bir zemin yer paylaşımını haritaya ekledikten sonra değiştirmek veya kaldırmak isterseniz GroundOverlay nesnesini tuttuğunuzdan emin olun. Bu nesnede değişiklik yaparak yer paylaşımını daha sonra değiştirebilirsiniz.

Java


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

      

Kotlin


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

      

Yer paylaşımını kaldırma

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

Java


imageOverlay.remove();

      

Kotlin


imageOverlay?.remove()

      

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

Zemin bindirme görüntüsünü, haritaya GroundOverlay.setImage(BitmapDescriptor) yöntemi eklendikten sonra değiştirebilirsiniz.

Java


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

      

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

      

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.
  • Resmin kuzey doğu ve güneybatı köşelerini belirtmek için LatLngBounds kullanılır.

Zemin bindirmesinin haritaya eklenmesinden önce konumunu belirtmeniz gerekir.

Resmi konumlandırmak için konumu kullanın

Görüntüyü eklediğinizde, sabitin düzeltileceğ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) sağlayabilirsiniz. Yer paylaşımının yüksekliğini sağlamazsanız resmin oranlarını korumak için yer paylaşımı 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 sabitlenmiştir.

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

      

Kotlin


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

      

Resmi konumlandırmak için LatLngBounds kullanın

Resmin bulunduğu bir LatLngBounds sağlarsınız. LatLngBounds, görüntünün kuzeydoğusunda ve güneybatısında bulunan köşeleri ayarlar. Resim haritada çizildiğinde, sınırlara uyacak şekilde döndürülecektir. Sınırlar orijinal en boy oranıyla eşleşmiyorsa resim eğik olur.

Aşağıdaki kod, görüntüye Güneybatı köşesi 40.712216,-74.22655 ve Kuzey Doğu köşesi 40.773941, -74.12544 olacak şekilde bir resim yerleştirir.

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

      

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)

      

Verileri bir yer paylaşımıyla ilişkilendirme

Zeminde bindirme içeren 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, yer paylaşımı içeren bir dize açıklaması depolanır:

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

      

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"

      

Zemin bindirmelerinde verileri depolamanın ve almanın yararlı olduğu bazı örnek senaryoları burada bulabilirsiniz:

  • Uygulamanız farklı yer paylaşımlarına hitap edebilir ve kullanıcı bunları tıkladığında farklı davranın.
  • Yer paylaşımları, sistemdeki belirli kayıtları temsil eden benzersiz kayıt tanımlayıcılarına sahip bir sistemle karşılaşıyor olabilirsiniz.
  • Yer paylaşımı verileri, yer paylaşımı için z-endeksinin belirlenmesine öncelik verildiğini gösterebilir.

Zemin bindirme etkinliklerini işleme

Varsayılan olarak, yer paylaşımları tıklanamaz. Tıklanarak etkinleştirilebilir ve devre dışı bırakılabilir (GroundOverlay.setClickable(boolean).

Tıklanabilir bir yer paylaşımında 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 paylaşımını tıkladığında onGroundOverlayClick(GroundOverlay) geri çağırması alırsınız.