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:
- GroundOverlayDemoActivity - Java: Java'daki zemin yer paylaşımı özellikleri ve dinleyiciler
- GroundOverlayDemoActivity - Kotlin: Kotlin'de zemin yer paylaşımı özellikleri ve dinleyiciler
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:
- Yeni bir
GroundOverlayOptions
nesnesi oluşturun - 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)
- İstediğiniz gibi
transparency
gibi isteğe bağlı özellikleri ayarlayın. - 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.