
Zemin yer paylaşımları, 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 deposu, yer üstü katmanları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ş
Zemin yer paylaşımı, haritaya sabitlenmiş bir resimdir. İşaretçilerin aksine, yer bindirmeleri ekrana göre değil, Dünya yüzeyine 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. Zemin yer paylaşımları, haritadaki bir alana tek bir resim yerleştirmek 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 Karo yer paylaşımı kullanabilirsiniz.
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. Daha sonra değiştirmek isterseniz bu nesneye bir referans tutmanız gerekir.
Adım adım:
- Yeni bir
GroundOverlayOptionsnesnesi örneklendirin - Resmi
BitmapDescriptorolarak 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)
transparencygibi isteğe bağlı özellikleri dilediğiniz gibi ayarlayın.- Resmi haritaya eklemek için
GoogleMap.addGroundOverlay()yöntemini çağırın.
Aşağıdaki örnekte, mevcut bir GoogleMap nesnesine yer yer paylaşımı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);
Haritaya eklediğiniz bir yer yer paylaşımını değiştirmek veya kaldırmak istiyorsanız GroundOverlay nesnesini sakladığınızdan emin olun. 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 yer üstü yer paylaşımını kaldırabilirsiniz.
Kotlin
imageOverlay?.remove()
Java
imageOverlay.remove();
Yer paylaşımını değiştirme
Yer yer paylaşımı resmini, GroundOverlay.setImage(BitmapDescriptor) yöntemiyle haritaya eklendikten 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ı boyutlarda başka bir resimle değiştirir.
Zemin yer paylaşımını konumlandırma
Yer yer paylaşımının konumunu belirtmenin iki yolu vardır:
- Yer paylaşımını ortalamak için
LatLng, resmin boyutunu belirtmek için ise metre cinsinden boyutlar kullanılıyor. - Resmin kuzeydoğu ve güneybatı köşelerini belirtmek için
LatLngBoundskullanma.
Haritaya eklenmeden önce yer yer paylaşımının konumunu belirtmeniz gerekir.
Resmi konumlandırmak için konumu kullanma
Resmi eklerken, sabitleyicinin 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. İsterseniz yer paylaşımının yüksekliğini (metre cinsinden) belirtebilirsiniz. Yer paylaşımının yüksekliğini belirtmezseniz resmin oranlarını korumak için yükseklik 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 alt tarafa 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
Resmi içeren bir LatLngBounds sağlarsınız. LatLngBounds, resmin kuzeydoğu ve güneybatı köşelerini ayarlar. Resim haritaya çizildiğinde sınırlara sığacak şekilde döndürülür. Sınırlar orijinal en boy oranıyla eşleşmiyorsa resim eğrilir.
Aşağıdaki kod, haritaya güneybatı köşesi 40.712216,-74.22655 ve kuzeydoğu köşesi 40.773941, -74.12544 ile sınırlı bir resim yerleştirir.
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 üstü yer paylaşımıyla ilişkilendirme
Bir yer yer paylaşımıyla rastgele bir veri nesnesi depolamak için GroundOverlay.setTag() yöntemini çağırabilir ve veri nesnesini GroundOverlay.getTag() kullanarak alabilirsiniz.
Aşağıdaki kod örneğinde, bir yer yer paylaşımıyla birlikte dize açıklaması depolanmaktadı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");
Zemin yer paylaşımlarıyla veri depolamanın ve almanın yararlı olduğu senaryolara dair bazı örnekler:
- Uygulamanız farklı yer üstü katmanları için uygun olabilir ve kullanıcı tıkladığında bunları farklı şekilde ele almak isteyebilirsiniz.
- Benzersiz kayıt tanımlayıcıları olan bir sistemle etkileşim kuruyor olabilirsiniz. Bu durumda, yer paylaşımları bu sistemdeki belirli kayıtları temsil eder.
- Yer paylaşımı verileri, yer paylaşımının z-endeksini belirlemek için bir öncelik gösterebilir.
Zemin yer paylaşımı etkinliklerini işleme
Varsayılan olarak, zemin 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 yer paylaşımındaki tıklama etkinliklerini dinlemek için OnGroundOverlayClickListener kullanın. Bu dinleyiciyi haritada ayarlamak için GoogleMap.setOnGroundOverlayClickListener(OnGroundOverlayClickListener) yöntemini çağırın.
Kullanıcı bir zemin yer paylaşımını tıkladığında onGroundOverlayClick(GroundOverlay) geri çağırma işlevi alırsınız.