Boden-Overlays

Plattform auswählen: Android iOS JavaScript

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:

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:

  1. Instanziieren Sie ein neues GroundOverlayOptions-Objekt.
  2. Geben Sie das Bild als BitmapDescriptor an.
  3. 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)
  4. Legen Sie bei Bedarf optionale Eigenschaften wie z. B. transparency fest.
  5. 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 Klickereignisse 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.