Zemin bindirmeleri, enlem/boylam koordinatlarına bağlı görüntü bindirmeleri olduğundan 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:
- GroundOverlayDemoActivity - Java: Java'daki zemin yer paylaşımı özellikleri ve işleyicileri
- GroundOverlayDemoActivity - Kotlin: Kotlin'de yer paylaşımı özellikleri ve işleyiciler
Giriş
Zemin bindirme, bir haritaya sabitlenmiş bir resimdir. İşaretçilerden farklı olarak, zemin bindirmeleri ekrana değil, Dünya yüzeyine dönüktür. Bu nedenle, haritayı döndürmek, eğmek veya yakınlaştırmak resmin yönünü değiştirir. Zemin bindirmeleri, haritadaki bir alandaki tek bir resmi düzeltmek istediğinizde yararlı olur. 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.
Bindirme 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 belirleyebilirsiniz. Gerekli seçenekleri tanımladıktan sonra, resmi haritaya eklemek için nesneyi GoogleMap.addGroundOverlay()
yöntemine iletin. addGroundOverlay()
yöntemi, GroundOverlay
nesnesi döndürür. Bu nesneyi daha sonra değiştirmek istiyorsanız nesneye yönelik bir referansı korumanız gerekir.
Adım adım:
- Yeni bir
GroundOverlayOptions
nesnesi örneği oluşturun - Resmi
BitmapDescriptor
olarak belirtin. - Resmin konumunu, mevcut yöntemlerden birini kullanarak ayarlayın:
position(LatLng location, float width, float height)
position(LatLng location, float width)
positionFromBounds(LatLngBounds bounds)
- İsteğe bağlı özellikleri (ör.
transparency
) istediğiniz gibi ayarlayın. - 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 tuttuğunuzdan emin olun. Bu nesnede değişiklik yaparak bindirmeyi 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
Bir 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:
- Bindirmeyi ortalamak için
LatLng
ve resmin boyutunu belirtmek için boyutları metre cinsinden kullanma. - Resmin kuzeydoğu ve güneybatı köşelerini belirtmek için
LatLngBounds
kullanma.
Zemin bindirmenin haritaya eklenmeden önce konumunu belirtmeniz gerekir.
Resmi konumlandırmak için konumu kullan
Resmi eklerken, bağlayıcının sabitleneceği LatLng ve bindirmenin 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 belirtebilirsiniz (metre cinsinden). Bindirmenin yüksekliğini belirtmezseniz, 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 40.714086, -74.228697
. konuma bir resim 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);
Bir resmi konumlandırmak için LatLngBounds kullanma
Resmin bulunduğu bir LatLngBounds
sağlarsınız. LatLngBounds
, resmin kuzeydoğu ve güneybatı köşelerini belirler. Resim, harita üzerinde çizildiğinde 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 kodda, Güneybatı köşesi 40.712216,-74.22655
ve Kuzey Doğu köşesi 40.773941, -74.12544
'e bağlı olacak şekilde haritaya bir resim yerleştirilir.
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 bir zemin bindirmeyle ilişkilendirme
Yer paylaşımına sahip 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 yer paylaşımıyla birlikte 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 senaryolara ilişkin bazı örnekler verilmiştir:
- Uygulamanızda farklı zemin bindirmeleri sunuluyor olabilir ve kullanıcı tıkladığında bunları farklı şekilde ele almak istersiniz.
- Benzersiz kayıt tanımlayıcılarına sahip bir sistemle çalışıyor olabilirsiniz. Yer paylaşımları, sistemdeki belirli kayıtları temsil eder.
- Yer paylaşımı 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 bindirmesinde tıklama etkinliklerini dinlemek için OnGroundOverlayClickListener
kullanın. Bu işleyiciyi haritada ayarlamak için GoogleMap.setOnGroundOverlayClickListener(OnGroundOverlayClickListener)
numaralı telefonu arayın.
Bir kullanıcı yer paylaşımını tıkladığında onGroundOverlayClick(GroundOverlay)
geri çağırması alırsınız.