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:
- GroundOverlayDemoActivity - Java: Java'da zemin yer paylaşımı özellikleri ve dinleyiciler
- GroundOverlayDemoActivity - Kotlin: Kotlin'de zemin yer paylaşımı özellikleri ve dinleyiciler
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 konumunu 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:
- Yeni bir
GroundOverlayOptions
nesnesi oluşturma - Resmi
BitmapDescriptor
olarak belirtin. - Mevcut yöntemlerden birini kullanarak resmin konumunu ayarlayın:
position(LatLng location, float width, float height)
position(LatLng location, float width)
positionFromBounds(LatLngBounds bounds)
transparency
gibi isteğe bağlı özellikleri istediğiniz gibi ayarlayın.- Resmi haritaya eklemek için
GoogleMap.addGroundOverlay()
numaralı telefonu 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 yerleştirilir. İ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 bir resim yerleştirir. Resmin güney batı köşesi 40.712216,-74.22655
, kuzeydoğu köşesi ise 40.773941, -74.12544
ile sınırlıdı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 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ı olabilecek bazı senaryolar 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.