Zemin yer paylaşımları

Platform seçin: Android iOS JavaScript

Zemin bindirmeler, 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 deposunda, yer paylaşımlarını gösteren bir örnek yer alır:

Giriş

Yer paylaşımı, haritaya sabitlenmiş bir resimdir. İşaretçilerden farklı olarak, yer paylaşımları ekrana değil, yeryüzüne 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. Yer paylaşımları, haritada tek bir resmi belirli bir alana sabitlemek 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 bir referans saklamanı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. İstediğiniz gibi transparency gibi isteğe bağlı özellikleri ayarlayın.
  5. Resmi haritaya eklemek için GoogleMap.addGroundOverlay() numaralı telefonu arayın.

Aşağıdaki örnekte, mevcut bir GoogleMap nesnesine yer kaplamasının 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 yer paylaşımı 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 düzenleyebilirsiniz.

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

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

Kotlin

imageOverlay?.remove()

      

Java

imageOverlay.remove();

      

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

Zemin yer paylaşımı 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.

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

Resmi konumlandırmak için konumu kullanma

Resmi eklediğinizde, sabitleme noktasını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 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ğinde bir resmi 40.714086, -74.228697 konumuna yerleştirir. 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);

      

Resmi 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şmezse resim eğri görünür.

Aşağıdaki kod, haritaya bir resim yerleştirir. Resmin güneybatı köşesi 40.712216,-74.22655, kuzeydoğu köşesi ise 40.773941, -74.12544 ile sınırlanı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 yer paylaşımıyla ilişkilendirme

GroundOverlay.setTag() işlevini çağırarak bir yer paylaşımıyla birlikte rastgele bir veri nesnesi depolayabilir ve GroundOverlay.getTag() işlevini kullanarak veri nesnesini alabilirsiniz.

Aşağıdaki kod örneğinde, yer paylaşımı içeren bir dize açıklaması saklanmaktadı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");

      

Yer paylaşımlarıyla verileri depolamanın ve almanın faydalı olduğu bazı senaryo örnekleri aşağıda verilmiştir:

  • Uygulamanız farklı yer paylaşımlarını destekliyor 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 bir öncelik gösterebilir.

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 paylaşımındaki tıklama etkinliklerini dinlemek için OnGroundOverlayClickListener kullanın. Bu işleyiciyi haritada ayarlamak için GoogleMap.setOnGroundOverlayClickListener(OnGroundOverlayClickListener) işlevini çağırın. Kullanıcı bir yer paylaşımını tıkladığında onGroundOverlayClick(GroundOverlay) geri çağırma işlemi alırsınız.