Boden-Overlays sind Bild-Overlays, die an Breiten- und Längengrad gebunden sind, sodass sie sich beim Ziehen und Zoomen der Karte mitbewegen.
Codebeispiele
Das ApiDemos-Repository auf GitHub enthält ein Beispiel für Boden-Overlays:
- GroundOverlayDemoActivity – Java: Boden-Overlay-Funktionen und ‑Listener in Java
- GroundOverlayDemoActivity – Kotlin: Boden-Overlay-Funktionen und ‑Listener in Kotlin
Einführung
Ein Boden-Overlay ist ein Bild, das auf einer Karte fixiert ist. Im Unterschied zu Markierungen sind Boden-Overlays an der Erdoberfläche und nicht am Bildschirm ausgerichtet. Deshalb wirkt sich das Drehen, Neigen oder Zoomen der Karte auch auf die Ausrichtung des Overlay-Bildes aus. Mit Boden-Overlays kann ein einzelnes Bild an einem Punkt der Karte fixiert werden. Wenn Sie umfangreiches Bildmaterial hinzufügen möchten, das einen großen Teil der Karte abdeckt, sollten Sie es mit einem Kachel-Overlay versuchen.
Overlay hinzufügen
Um ein GroundOverlay
hinzuzufügen, erstellen Sie ein GroundOverlayOptions
-Objekt, das sowohl ein Bild als auch eine Position definiert. Sie können außerdem zusätzliche Einstellungen angeben, die die Positionierung des Bilds auf der Karte beeinflussen. Nachdem Sie die erforderlichen Optionen definiert haben, übergeben Sie das Objekt an die GoogleMap.addGroundOverlay()
-Methode, um das Bild der Karte hinzuzufügen. Über die addGroundOverlay()
-Methode wird ein GroundOverlay
-Objekt zurückgegeben. Ein Verweis auf dieses Objekt sollte beibehalten werden, falls Sie es später ändern möchten.
Schritte:
- Instanziieren Sie ein neues
GroundOverlayOptions
-Objekt. - Geben Sie das Bild als
BitmapDescriptor
an. - Legen Sie die Position des Bilds mithilfe einer der verfügbaren Methoden fest:
position(LatLng location, float width, float height)
position(LatLng location, float width)
positionFromBounds(LatLngBounds bounds)
- Legen Sie bei Bedarf optionale Eigenschaften wie z. B.
transparency
fest. - Rufen Sie
GoogleMap.addGroundOverlay()
auf, um das Bild zur Karte hinzuzufügen.
Im folgenden Beispiel sehen Sie, wie ein Boden-Overlay einem vorhandenen GoogleMap
-Objekt hinzugefügt wird:
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);
Wenn Sie ein Boden-Overlay ändern oder entfernen möchten, nachdem Sie es der Karte hinzugefügt haben, muss das Objekt GroundOverlay
beibehalten werden. Sie können das Overlay später über dieses Objekt ändern.
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);
Overlay entfernen
Sie können ein Boden-Overlay mit der Methode GroundOverlay.remove()
entfernen.
Kotlin
imageOverlay?.remove()
Java
imageOverlay.remove();
Overlay ändern
Sie können das Bild des Boden-Overlays ändern, nachdem es der Karte mit der Methode GroundOverlay.setImage(BitmapDescriptor)
hinzugefügt wurde.
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));
Bei der Methode setImage()
wird das vorhandene Bild durch ein anderes Bild derselben Größe ersetzt.
Boden-Overlay positionieren
Es gibt zwei Möglichkeiten, Boden-Overlays zu positionieren.
- Sie können
LatLng
verwenden, um das Overlay zu zentrieren, und Abmessungen in Metern anführen, um die Bildgröße anzugeben. - Verwenden Sie
LatLngBounds
, um die Nordost- und Südwestecke des Bilds anzugeben.
Sie müssen die Position des Boden-Overlays angeben, bevor Sie es der Karte hinzufügen.
Bild mithilfe eines Standorts positionieren
Beim Hinzufügen des Bilds geben Sie einen LatLng-Wert zum Fixieren des Ankers sowie die Breite des Overlays in Metern an. Die Position anchor
befindet sich standardmäßig in der Mitte des Bilds. Optional können Sie die Höhe des Overlays (in Metern) angeben. Wenn Sie die Höhe des Overlays nicht angeben, wird sie automatisch unter Beibehaltung des Seitenverhältnisses des Bilds berechnet.
Durch den unten stehenden Code wird an der Position 40.714086, -74.228697
ein Bild platziert, das 8,6 km breit und 6,5 km hoch ist. Das Bild wird unten links verankert.
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);
Bild mit „LatLngBounds“ positionieren
Sie stellen ein LatLngBounds
bereit, das das Bild enthält. Über LatLngBounds
werden die Nordost- und die Südwestecke des Bilds festgelegt. Beim Zeichnen des Bilds auf der Karte wird es so gedreht, dass es in die Begrenzungen passt. Wenn die Begrenzungen nicht dem ursprünglichen Seitenverhältnis entsprechen, wird das Bild verzerrt dargestellt.
Mit dem Code unten wird auf der Karte ein Bild platziert, dessen Südwest- und Nordostecke sich bei 40.712216,-74.22655
bzw. 40.773941, -74.12544
befinden.
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);
Daten mit einem Boden-Overlay verknüpfen
Sie können GroundOverlay.setTag()
aufrufen, um ein beliebiges Datenobjekt mit einem Boden-Overlay zu speichern, und das Datenobjekt mit GroundOverlay.getTag()
abrufen.
Im folgenden Codebeispiel wird eine Stringbeschreibung mit einem Boden-Overlay gespeichert:
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");
Nachfolgend sind beispielhaft einige Szenarien aufgeführt, in denen es nützlich ist, Daten mit Boden-Overlays zu speichern und abzurufen:
- Ihre App stellt möglicherweise verschiedene Boden-Overlays zur Verfügung, die unterschiedlich behandelt werden sollen, wenn der Nutzer darauf klickt.
- Sie sind möglicherweise über eine Schnittstelle an ein System angebunden, in dem es eindeutige IDs für Datensätze gibt, wobei die Overlays spezifische Datensätze in diesem System darstellen.
- Mithilfe von Overlay-Daten kann eine Priorität angegeben werden, um den Z-Index für das Overlay zu ermitteln.
Boden-Overlay-Ereignisse verarbeiten
Boden-Overlays sind standardmäßig nicht anklickbar. Das kann durch Aufrufen von GroundOverlay.setClickable(boolean)
aktiviert oder deaktiviert werden.
Mithilfe von OnGroundOverlayClickListener
können Sie Click-Events bei einem anklickbaren Boden-Overlay erfassen. Rufen Sie GoogleMap.setOnGroundOverlayClickListener(OnGroundOverlayClickListener)
auf, um diesen Listener auf der Karte festzulegen.
Wenn ein Nutzer auf ein Boden-Overlay klickt, erhalten Sie einen onGroundOverlayClick(GroundOverlay)
-Callback.