
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 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 referans vermeye devam etmeniz gerekir.
Adım adım:
- Yeni bir
GroundOverlayOptionsnesnesi oluşturun - 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 paylaşımı 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) imageOverlay?.let { val isClickable = it.isClickable val isVisible = it.isVisible val bearing = it.bearing val transparency = it.transparency val zIndex = it.zIndex val position = it.position val width = it.width val height = it.height }
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
Yer paylaşımını GroundOverlay.remove() yöntemiyle kaldırabilirsiniz.
Kotlin
imageOverlay?.remove()
Java
imageOverlay.remove();
Katmanı 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ı boyutlarda başka bir resimle değiştirir.
Zemin yer paylaşımını 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
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. İ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, 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 sabitlenmiştir.
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);
Resim 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ş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 paylaşımıyla rastgele bir veri nesnesi depolamak için GroundOverlay.setTag() işlevini çağırabilir ve GroundOverlay.getTag() işlevini kullanarak veri nesnesini alabilirsiniz.
Aşağıdaki kod örneğinde, yer üstü katmanıyla birlikte bir 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ı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 öncelik gösterebilir.
Yer 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 yer paylaşımındaki tıklama etkinliklerini dinlemek için OnGroundOverlayClickListener kullanın. Bu dinleyiciyi haritada ayarlamak için GoogleMap.setOnGroundOverlayClickListener(OnGroundOverlayClickListener) işlevini ç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.