Es kann losgehen!

Bevor Sie mit der Entwicklung beginnen, lesen Sie bitte unsere Entwicklerdokumentation.

Die Google Maps Android API aktivieren

Zum Einstieg führen wir Sie durch die Google Developers Console, wo Sie vorab Folgendes tun müssen:

  1. Ein Projekt erstellen oder auswählen
  2. Die Google Maps Android API aktivieren
  3. Zugehörige Schlüssel erstellen
Weiter

Formen

Die Google Maps API for Android bietet einige einfache Möglichkeiten, wie Sie Formen zu Ihren Karten hinzufügen können, um diese für Ihre Anwendung anzupassen.

  • Polyline: Eine Polylinie besteht aus einer Gruppe verbundener Liniensegmente, die Sie zu einer beliebigen Form zusammenfügen können, um Wege und Routen auf einer Karte zu kennzeichnen.
  • Polygon: Ein Polygon ist eine geschlossene Form, mit der Sie Bereiche auf einer Karte kennzeichnen können.
  • Circle: Ein Kreis ist eine geografisch genaue Projektion eines Kreises auf der Erdoberfläche, die auf der Karte gezeichnet wird.

Sie können das Erscheinungsbild all dieser Formen anpassen, indem Sie verschiedene Eigenschaften verändern.

Codebeispiele

Das ApiDemos-Repository auf GitHub enthält Beispiele, in denen die Verwendung der Formen und ihrer Funktionen veranschaulicht wird.

Polylinien

Mit der Klasse Polyline wird eine Gruppe verbundener Segmente auf der Karte definiert. Ein Objekt Polyline besteht aus einer Gruppe StandorteLatLng. Mit diesem Objekt wird eine Gruppe von Liniensegmenten erstellt, die diese Standorte in einer bestimmten Reihenfolge verbinden.

Im nachfolgenden Video wird gezeigt, wie Sie Ihre Benutzer dabei unterstützen, den Weg zu ihrem Ziel zu finden, indem Sie mit Polylinien einen Weg auf der Karte zeichnen.

Um eine Polylinie zu zeichnen, erstellen Sie zunächst ein Objekt PolylineOptions und fügen dem Objekt anschließend Punkte hinzu. Punkte stehen für einen Punkt auf der Erdoberfläche ; sie werden als Objekt LatLng dargestellt. Zwischen den Punkten werden Linien in der Reihenfolge gezogen, in der Sie sie zum Objekt PolylineOptions hinzufügen. Um Punkte zu einem Objekt PolylineOptions hinzuzufügen, rufen Sie PolylineOptions.add() auf. Beachten Sie, dass diese Methode eine variable Anzahl an Parametern ermöglicht; Sie können also mehrere Punkte gleichzeitig hinzufügen (Sie können auch „PolylineOptions.addAll(Iterable)“ aufrufen, wenn die Punkte bereits in der Liste enthalten sind).

Anschließend können Sie die Polylinie zu einer Karte hinzufügen, indem Sie GoogleMap.addPolyline(PolylineOptions) aufrufen. Die Methode gibt ein Objekt Polyline zurück, mithilfe dessen Sie die Polylinie zu einem späteren Zeitpunkt ändern können.

Im folgenden Codebeispiel wird ein Rechteck zu einer Karte hinzugefügt:

// Instantiates a new Polyline object and adds points to define a rectangle
PolylineOptions rectOptions = new PolylineOptions()
        .add(new LatLng(37.35, -122.0))
        .add(new LatLng(37.45, -122.0))  // North of the previous point, but at the same longitude
        .add(new LatLng(37.45, -122.2))  // Same latitude, and 30km to the west
        .add(new LatLng(37.35, -122.2))  // Same longitude, and 16km to the south
        .add(new LatLng(37.35, -122.0)); // Closes the polyline.

// Get back the mutable Polyline
Polyline polyline = myMap.addPolyline(rectOptions);

Um die Form einer Polylinie nach dem Hinzufügen zu ändern, können Sie Polyline.setPoints() aufrufen und eine neue Liste mit Punkten für die Polylinie bereitstellen.

Sie können das Erscheinungsbild der Polylinie sowohl vor als auch nach dem Hinzufügen zur Karte anpassen. Weitere Informationen zum Anpassen des Erscheinungsbilds finden Sie im nachfolgenden Abschnitt.

Polylinienereignisse

Polylinien sind standardmäßig nicht klickbar. Sie können die Klickbarkeit aktivieren bzw. deaktivieren, indem Sie Polyline.setClickable(boolean) aufrufen.

Verwenden Sie einen OnPolylineClickListener, um auf Klickereignisse auf einer klickbaren Polylinie zu reagieren. Um diesen Listener auf der Karte einzurichten, rufen Sie GoogleMap.setOnPolylineClickListener(OnPolylineClickListener) auf. Wenn ein Nutzer auf eine Polylinie klickt, erhalten Sie einen Callback onPolylineClick(Polyline).



Polygone

Das Objekt Polygon ähnelt dem Objekt Polyline dahingehend, dass es ebenfalls aus einer Reihe von Koordinaten in einer bestimmten Reihenfolge besteht. Es handelt sich jedoch nicht um eine offene Form, sondern kennzeichnet Bereiche durch einen geschlossenen Rahmen plus Füllung.

Um ein Objekt Polygon zur Karte hinzuzufügen, verfahren Sie genau wie beim Hinzufügen eines Objekts Polyline. Erstellen Sie zunächst ein Objekt PolygonOptions, und fügen Sie anschließend Punkte zum Objekt hinzu. Diese Punkte bilden dann den Rahmen des Polygons. Anschließend fügen Sie das Polygon zur Karte hinzu, indem Sie GoogleMap.addPolygon(PolygonOptions) aufrufen; das Ergebnis ist ein Objekt Polygon.

Mit dem folgenden Codebeispiel wird ein Rechteck zu einer Karte hinzugefügt (da wir keine Füllfarbe definiert haben und die Standardfüllfarbe transparent ist, erfolgt dies in exakt derselben Weise wie das Hinzufügen der Polylinie aus dem Codebeispiel im vorangehenden Abschnitt):

// Instantiates a new Polygon object and adds points to define a rectangle
PolygonOptions rectOptions = new PolygonOptions()
              .add(new LatLng(37.35, -122.0),
                   new LatLng(37.45, -122.0),
                   new LatLng(37.45, -122.2),
                   new LatLng(37.35, -122.2),
                   new LatLng(37.35, -122.0));

// Get back the mutable Polygon
Polygon polygon = myMap.addPolygon(rectOptions);

Um die Form des Polygons nach dem Hinzufügen zu ändern, rufen Sie Polygon.setPoints() auf, und stellen Sie eine neue Liste mit Punkten für den Rahmen des Polygons bereit.

Sie können das Erscheinungsbild des Polygons sowohl vor als auch nach dem Hinzufügen zur Karte anpassen. Weitere Informationen zum Anpassen des Erscheinungsbilds finden Sie im nachfolgenden Abschnitt.

Autovervollständigen von Polygonen

Das Polygon im obenstehenden Beispiel besteht aus fünf Koordinaten; beachten Sie jedoch, dass die erste und die letzte Koordinate denselben Ort bezeichnen, um eine geschlossene Form zu erhalten. Da Polygone geschlossene Bereiche definieren, ist es in der Praxis jedoch nicht erforderlich, diese letzte Koordinate zu definieren. Wenn die letzte Koordinate sich von der ersten unterscheidet, „schließt“ die API automatisch das Polygon, indem die erste Koordinate am Ende der Koordinatensequenz angefügt wird.

Die nachfolgenden beiden Polygone sind äquivalent. Wenn polygon.getPoints() für beide Polygone aufgerufen wird, werden alle 4 Punkte zurückgegeben.

Polygon polygon = map.addPolygon(new PolygonOptions()
        .add(new LatLng(0, 0), new LatLng(0, 5), new LatLng(3, 5), new LatLng(0, 0))
        .strokeColor(Color.RED)
        .fillColor(Color.BLUE));

Polygon polygon = map.addPolygon(new PolygonOptions()
         .add(new LatLng(0, 0), new LatLng(0, 5), new LatLng(3, 5))
         .strokeColor(Color.RED)
         .fillColor(Color.BLUE));

Polygone ohne Füllung erstellen

Sie können mehrere Pfade zu einem einzigen Objekt Polygon verbinden, um komplexe Formen zu erstellen, z. B. gefüllte Ringe oder „Kringel“ (bei denen Polygonalbereiche wie „Inseln“ innerhalb des Polygons liegen). Komplexe Formen setzen sich immer aus mehreren einfacheren Pfaden zusammen.

Zwei Pfade müssen im selben Bereich definiert werden. Der größere der beiden Bereiche definiert den Füllbereich; es handelt sich dabei um ein einfaches Polygon ohne zusätzliche Optionen. Anschließend übergeben Sie einen zweiten Pfad an die Methode addHole(). Wenn der zweite, kleinere Pfad vollständig innerhalb des größeren Pfads liegt, wirkt die Darstellung, als wäre ein Teil des Polygons entfernt worden. Wenn das Loch die Rahmenlinie des Polygons schneidet, wird das Polygon ohne Füllung wiedergegeben.

Mit dem nachfolgenden Codebeispiel wird ein einzelnes Rechteck mit einer einfachen rechteckigen Öffnung erstellt.

mMap.addPolygon(new PolygonOptions()
        .add(new LatLng(0, 0), new LatLng(0, 5), new LatLng(3, 5), new LatLng(3, 0), new LatLng(0, 0))
        .addHole(new LatLng(1, 1), new LatLng(1, 2), new LatLng(2, 2), new LatLng(2, 1), new LatLng(1, 1))
        .fillColor(Color.BLUE));

Polygonereignisse

Polygone sind standardmäßig nicht klickbar. Sie können die Klickbarkeit aktivieren bzw. deaktivieren, indem Sie Polygon.setClickable(boolean) aufrufen.

Verwenden Sie einen OnPolygonClickListener, um auf Klickereignisse auf ein klickbares Polygon zu reagieren. Um diesen Listener auf der Karte einzurichten, rufen Sie GoogleMap.setOnPolygonClickListener(OnPolygonClickListener) auf. Wenn ein Nutzer auf ein Polygon klickt, erhalten Sie einen Callback onPolygonClick(Polygon).



Kreise

Zusätzlich zu einer generischen Klasse Polygon umfasst die Maps API außerdem spezielle Klassen für Objekte vom Typ Circle, um das Konstruieren von Kreisen zu erleichtern.

Um einen Kreis zu konstruieren, definieren Sie die folgenden beiden Eigenschaften:

  • center als LatLng.
  • radius in Metern.

Dies definiert die Erstellung eines Kreises an allen Punkten auf der Erdoberfläche, die radius Meter vom vorgegebenen center liegen. Da die Art der Verwendung der Mercator-Projektion durch Maps API ein Panorama auf einer flachen Oberfläche wiedergibt, ist das Ergebnis in Äquatornähe ein fast perfekter Kreis auf der Karte. Je weiter der Kreis vom Äquator entfernt ist, desto „unrunder“ ist seine Form (auf dem Bildschirm).

Im folgenden Codebeispiel wird ein Kreis zu einer Karte hinzugefügt, indem ein Objekt CircleOptions konstruiert und GoogleMap.addCircle(CircleOptions) aufgerufen wird:

// Instantiates a new CircleOptions object and defines the center and radius
CircleOptions circleOptions = new CircleOptions()
    .center(new LatLng(37.4, -122.1))
    .radius(1000)); // In meters

// Get back the mutable Circle
Circle circle = myMap.addCircle(circleOptions);

Um die Form des Kreises nach dem Hinzufügen zu ändern, rufen Sie Circle.setRadius() oder Circle.setCenter() auf, und geben Sie neue Werte ein.

Sie können das Erscheinungsbild des Kreises sowohl vor als auch nach dem Hinzufügen zur Karte anpassen. Weitere Informationen zum Anpassen des Erscheinungsbilds finden Sie im nachfolgenden Abschnitt.

Kreisereignisse

Kreise sind standardmäßig nicht klickbar. Sie können die Klickbarkeit aktivieren bzw. deaktivieren, indem Sie GoogleMap.addCircle() mit CircleOptions.clickable(boolean) aufrufen oder indem Sie Circle.setClickable(boolean) aufrufen.

Verwenden Sie einen OnCircleClickListener, um auf Klickereignisse auf einen klickbaren Kreis zu reagieren. Um diesen Listener auf der Karte einzurichten, rufen Sie GoogleMap.setOnCircleClickListener(OnCircleClickListener) auf.

Wenn ein Benutzer auf einen Kreis klickt, erhalten Sie einen Callback onCircleClick(Circle), wie es in folgendem Beispielcode gezeigt wird:

public class MyActivity extends FragmentActivity
        implements OnMapReadyCallback {

        private GoogleMap mMap;
        private Circle circle;

        @Override
        public void onMapReady(GoogleMap map) {
            mMap = map;

            circle = mMap.addCircle(new CircleOptions()
                .center(new LatLng(37.4, -122.1))
                .radius(1000)
                .strokeWidth(10)
                .strokeColor(Color.GREEN)
                .fillColor(Color.argb(128, 255, 0, 0))
                .clickable(true);

            map.setOnCircleClickListener(new OnCircleClickListener() {

                @Override
                public void onCircleClick(Circle circle) {
                    // Flip the r, g and b components of the circle's
                    // stroke color.
                    int strokeColor = circle.getStrokeColor() ^ 0x00ffffff;
                    circle.setStrokeColor(strokeColor);
                }
            });
        }
}


Erscheinungsbilder anpassen

Sie können das Erscheinungsbild einer Form sowohl vor als auch nach dem Hinzufügen zur Karte ändern (indem Sie die gewünschte Eigenschaft für das Optionsobjekt angeben). Getter sind für alle Eigenschaften eingeblendet, so dass Sie den aktuellen Zustand der Form ganz einfach aufrufen können.

Mit dem folgenden Codebeispiel wird eine dicke blaue Polylinie mit geodätischen Segmenten von Melbourne nach Perth hinzugefügt. In den nachfolgenden Abschnitten erhalten Sie ausführlichere Informationen zu diesen Eigenschaften.

Polyline line = map.addPolyline(new PolylineOptions()
    .add(new LatLng(-37.81319, 144.96298), new LatLng(-31.95285, 115.85734))
    .width(25)
    .color(Color.BLUE)
    .geodesic(true));

Hinweis: Obwohl die meisten dieser Eigenschaften für alle beschriebenen Formen angewandt werden können, sind die Eigenschaften bei bestimmten Formen wenig sinnvoll (z. B. kann eine Polylinie keine Füllfarbe haben, da es keinen Füllbereich gibt).

Strichfarbe

Die Strichfarbe ist eine 32-Bit-Alpha-Rot-Grün-Blau-Ganzzahl (ARGB), mit der die Deckkraft und die Farbe des Strichs einer Form angegeben wird. Sie definieren diese Eigenschaft im Optionsobjekt der Form, indem Sie *Options.strokeColor() (oder PolylineOptions.color() im Fall einer Polylinie) aufrufen. Ist kein Wert für die Strichfarbe angegeben, wird die Standardfarbe schwarz (Color.BLACK) verwendet.

Nachdem die Form zur Karte hinzugefügt wurde, können Sie die Strichfarbe aufrufen, indem Sie getStrokeColor() (oder getColor() für eine Polylinie) aufrufen. Um die Strichfarbe zu ändern, rufen Sie setStrokeColor() (setColor() for a polyline) auf.

Füllfarbe

Die Füllfarbe kann nur für Polygone und Kreise angewandt werden. Sie kann nicht für Polylinien verwendet werden, da diese keinen Füllbereich haben. Bei Polygonen sind die Bereiche innerhalb ihrer „Löcher“ nicht Teil ihres Füllbereichs; diese Bereiche werden nicht eingefärbt, wenn eine Füllfarbe definiert wird.

Die Füllfarbe ist eine 32-Bit-Alpha-Rot-Grün-Blau-Ganzzahl (ARGB), mit der die Deckkraft und die Farbe des Füllbereichs einer Form angegeben wird. Sie definieren diese Eigenschaft im Optionsobjekt der Form, indem Sie *Options.fillColor() aufrufen. Ist kein Wert angegeben, wird die Standardfarbe transparent (Color.TRANSPARENT) verwendet.

Nachdem die Form zur Karte hinzugefügt wurde, können Sie die Füllfarbe anzeigen, indem Sie getFillColor() aufrufen. Um die Füllfarbe zu ändern, rufen Sie setFillColor() auf.

Strichbreite

Die Breite einer gezeichneten Linie als Gleitkommawert in pixels (px). Beim Vergrößern der Karte wird die Strichbreite nicht mit skaliert (eine Form behält also bei allen Vergrößerungsstufen dieselbe Strichbreite bei). Sie definieren diese Eigenschaft im Optionsobjekt der Form, indem Sie *Options.strokeWidth() (bzw. PolylineOptions.width() für eine Polylinie) aufrufen. Ist kein Wert angegeben, beträgt die Standardstrichbreite 10 Pixel.

Nachdem die Form zur Karte hinzugefügt wurde, können Sie die Strichbreite anzeigen, indem Sie getStrokeWidth() (oder getWidth() für eine Polylinie) aufrufen. Um die Strichbreite zu ändern, rufen Sie setStrokeWidth() (setWidth() for a polyline) auf.

Geodätische Segmente

De geodätische Einstellung kann nur für Polylinien und Polygone verwendet werden. Für Kreise ist die Einstellung nicht anwendbar, da diese nicht als Auflistung von Segmenten definiert sind.

Mit der geodätischen Einstellung wird bestimmt, wie die Liniensegmente zwischen aufeinanderfolgenden Eckpunkten der Polylinien/Polygone gezogen werden. Als geodätische Segmente bezeichnet man Segmente, die den kürzesten Weg auf der Erdoberfläche (einer Kugel) nehmen und die bei Mercator-Projektion häufig als gekrümmte Linien dargestellt werden. Nicht-geodätische Segmente werden als gerade Linien auf der Karte gezeichnet.

Sie definieren diese Eigenschaft im Optionsobjekt der Form, indem Sie *Options.geodesic() aufrufen, wobei true bedeutet, dass die Segmente als geodätische Formen gezeichnet werden, und false bedeutet, dass die Segmente als Geraden gezeichnet werden. Ist kein Wert angegeben, werden standardmäßig nicht-geodätische Segmente verwendet (false).

Nachdem die Form zur Karte hinzugefügt wurde, können Sie die geodätische Einstellung anzeigen, indem Sie isGeodesic() aufrufen. Um die geodätische Einstellung zu ändern, rufen Sie setGeodesic() auf.

Z-Index

Der Z-Index gibt die Stapelreihenfolge relativ zu anderen Überlagerungen (andere Formen, Geländeüberlagerungen und Kachelüberlagerungen) auf der Karte an. Eine Überlagerung mit einem hohen Z-Index wird über Überlagerungen mit niedrigeren Z-Indizes gezeichnet. Zwei Überlagerungen mit demselben Z-Index werden in beliebiger Reihenfolge gezeichnet.

Beachten Sie, dass Marker immer über andere Überlagerungen gezeichnet werden, unabhängig vom Z-Index der anderen Überlagerungen.

Sie definieren diese Eigenschaft im Optionsobjekt der Form, indem Sie *Options.zIndex() aufrufen. Wird kein Wert angegeben, lautet der Standardwert für den Z-Index 0. Nachdem die Form zur Karte hinzugefügt wurde, können Sie den Z-Index anzeigen, indem Sie getZIndex() aufrufen. Um den Z-Index zu ändern, rufen Sie setZIndex() auf.

Sichtbarkeit

Mit der Sichtbarkeit wird festgelegt, ob die Form auf der Karte gezeichnet werden soll; true bedeutet hier, dass die Form gezeichnet wird, und false gibt an, dass die Form nicht gezeichnet wird. Mit dieser Eigenschaft können Sie eine Form auf einer Karte vorübergehend ausblenden. Um eine Form dauerhaft aus einer Karte entfernen, rufen Sie für diese Form remove() auf.

Sie definieren diese Eigenschaft im Optionsobjekt der Form, indem Sie *Options.visible() aufrufen. Wird kein Wert angegeben, ist der Standardwert für die Sichtbarkeit true. Nachdem die Form zur Karte hinzugefügt wurde, können Sie die Sichtbarkeit anzeigen, indem Sie isVisible() aufrufen. Um die Sichtbarkeit zu ändern, rufen Sie setVisible() auf.

Feedback geben zu...

Google Maps Android API
Google Maps Android API