Google Maps Android GeoJSON-Dienstprogramm

Plattform auswählen: Android iOS JavaScript
  1. Einführung
  2. GeoJsonLayer zu einer Karte hinzufügen
  3. GeoJsonLayer entfernen
  4. GeoJsonFeature hinzufügen und entfernen
  5. GeoJsonFeatures und ihre Attribute aufrufen
  6. GeoJsonLayer und GeoJsonFeatures formatieren
  7. Demo-App ansehen

Einführung

GeoJSON ist eine Erweiterung des JSON-Datenformats und stellt geografische Daten dar. Mit diesem Dienstprogramm kannst du geografische Merkmale im GeoJSON-Format speichern und als Ebene, die über eine Karte gelegt wird, darstellen. Rufe addLayerToMap() bzw. removeLayerFromMap() auf, um deine GeoJSON-Daten der Karte hinzuzufügen oder daraus zu entfernen. Entsprechend können Sie einzelne Elemente hinzufügen und entfernen, indem Sie addFeature() und removeFeature() aufrufen und ein GeoJsonFeature-Objekt übergeben. Um auf die Elemente zuzugreifen, können Sie getFeatures() aufrufen. Sie erhalten dann ein iterables Objekt aller GeoJsonFeature-Objekte, die der Ebene hinzugefügt wurden.

Sie können auch Standardstile definieren, die auf Elemente angewendet werden sollen, bevor sie der Ebene hinzugefügt werden. Dazu rufen Sie getDefaultPointStyle(), getDefaultLineStringStyle() oder getDefaultPolygonStyle() auf und legen entsprechende Stiloptionen fest. Alternativ lässt sich der Stil eines einzelnen GeoJsonFeature-Elements festlegen, indem Sie setPointStyle(), setLineStringStyle() oder setPolygonStyle() dafür aufrufen und das entsprechende Stilobjekt übergeben.

GeoJsonLayer zu deiner Karte hinzufügen

Um deiner Karte eine GeoJson-Ebene hinzuzufügen, erstellst du zuerst eine Instanz der Klasse „GeoJsonLayer“. Es gibt zwei Möglichkeiten, um die Klasse „GeoJsonLayer“ zu instanziieren.

Für den Import aus einem JSONObject ist Folgendes erforderlich:

  • Ein GoogleMap-Objekt, in dem die Ebene gerendert werden soll
  • JSONObject mit den GeoJSON-Daten, die der Ebene hinzugefügt werden sollen

Java


JSONObject geoJsonData = // JSONObject containing the GeoJSON data
GeoJsonLayer layer = new GeoJsonLayer(map, geoJsonData);

      

Kotlin


val geoJsonData: JSONObject? = // JSONObject containing the GeoJSON data
val layer = GeoJsonLayer(map, geoJsonData)

      

Für einen Import aus einer GeoJSON-Datei benötigst du Folgendes:

  • Ein GoogleMap-Objekt, in dem die Ebene gerendert werden soll
  • Eine lokale Ressourcendatei mit den GeoJSON-Daten
  • Ein Context-Objekt, das zum Öffnen von lokalen Ressourcen erforderlich ist

Java


GeoJsonLayer layer = new GeoJsonLayer(map, R.raw.geojson_file, context);

      

Kotlin


val layer = GeoJsonLayer(map, R.raw.geojson_file, context)

      

Nachdem Sie die GeoJsonLayer erstellt haben, rufen Sie addLayerToMap() auf, um die importierten Daten in die Karte aufzunehmen:

Java


layer.addLayerToMap();

      

Kotlin


layer.addLayerToMap()

      

GeoJsonLayer entfernen

Angenommen, Sie haben diese Ebene hinzugefügt:

Java


JSONObject geoJsonData = // JSONObject containing the GeoJSON data
GeoJsonLayer layer = new GeoJsonLayer(map, geoJsonData);

      

Kotlin


val geoJsonData: JSONObject? = // JSONObject containing the GeoJSON data
val layer = GeoJsonLayer(map, geoJsonData)

      

Rufe zum Löschen von GeoJsonLayer removeLayerFromMap() auf.

Java


layer.removeLayerFromMap();

      

Kotlin


layer.removeLayerFromMap()

      

GeoJsonFeature hinzufügen und entfernen

Merkmalen in GeoJSON ist der Typ „feature“ zugeordnet. Ein Merkmal enthält eine Geometrie, ein Eigenschaftsmitglied und hat optional einen Begrenzungsrahmen oder eine ID.

Sie können GeoJsonFeature-Objekte einzeln erstellen und zur GeoJsonLayer hinzufügen.

Angenommen, du hast ein Merkmal erstellt, das einen Punkt an 0,0 mit einem Eintrag in den Eigenschaften und ohne Begrenzungsrahmen enthält.

Java


GeoJsonPoint point = new GeoJsonPoint(new LatLng(0, 0));
HashMap<String, String> properties = new HashMap<>();
properties.put("Ocean", "South Atlantic");
GeoJsonFeature pointFeature = new GeoJsonFeature(point, "Origin", properties, null);

      

Kotlin


val point = GeoJsonPoint(LatLng(0.0, 0.0))
val properties = hashMapOf("Ocean" to "South Atlantic")
val pointFeature = GeoJsonFeature(point, "Origin", properties, null)

      

Rufe addFeature() auf, um das Merkmal zu übergeben und der Ebene hinzuzufügen.

Java


layer.addFeature(pointFeature);

      

Kotlin


layer.addFeature(pointFeature)

      

Um ein Element nach dem Hinzufügen zur Ebene zu entfernen, rufen Sie removeFeature() auf und übergeben Sie das entsprechende Element.

Java


layer.removeFeature(pointFeature);

      

Kotlin


layer.removeFeature(pointFeature)

      

GeoJsonFeatures und ihre Eigenschaften aufrufen

Um auf alle „GeoJsonFeatures“-Elemente zuzugreifen, die der Ebene hinzugefügt wurden, können Sie getFeatures() für die GeoJsonLayer aufrufen, die Sie erstellt haben. Dadurch wird ein iterables Objekt für GeoJsonFeatures zurückgegeben, auf das Sie mithilfe einer For-Each-Schleife zugreifen können (siehe unten).

Java


for (GeoJsonFeature feature : layer.getFeatures()) {
    // Do something to the feature
}

      

Kotlin


for (feature in layer.features) {
    // Do something to the feature
}

      

Mit den Methoden hasProperty() und getProperty() in Verbindung mit der Methode getFeatures() können Sie prüfen, ob die gespeicherten Elemente ein bestimmtes Attribut haben und ggf. darauf zugreifen.

Java


if (feature.hasProperty("Ocean")) {
    String oceanProperty = feature.getProperty("Ocean");
}

      

Kotlin


if (feature.hasProperty("Ocean")) {
    val oceanProperty = feature.getProperty("Ocean")
}

      

GeoJSON-Geometrie-Klickereignisse

Sie können GeoJsonLayer.OnFeatureClickListener() verwenden, um Klickereignisse für die Geometrieelemente der Karte zu erfassen. Im folgenden Beispiel wird der Titel eines Merkmals protokolliert, wenn der Nutzer darauf klickt:

Java


// Set a listener for geometry clicked events.
layer.setOnFeatureClickListener(new Layer.OnFeatureClickListener() {
    @Override
    public void onFeatureClick(Feature feature) {
        Log.i("GeoJsonClick", "Feature clicked: " + feature.getProperty("title"));
    }
});

      

Kotlin


// Set a listener for geometry clicked events.
layer.setOnFeatureClickListener { feature ->
    Log.i("GeoJsonClick", "Feature clicked: ${feature.getProperty("title")}")
}

      

GeoJsonLayer und GeoJsonFeatures formatieren

Sie können Standardstile für eine GeoJsonLayer definieren oder einzelne Elemente der Ebene mit Stilen versehen.

Standardformate

In einer GeoJsonLayer können Sie Standardstile für beliebige Punkte, LineStrings und Polygone definieren, die der Ebene hinzugefügt werden. Standardformate werden nur angewendet, wenn für ein Merkmal keine Formatvorlagensätze für eine ihrer Geometrien vorhanden sind. Jede Änderung, die du an der Standardformatierung vornimmst, wirkt sich auf alle Merkmale aus, für die diese Standardformatierung verwendet werden.

Nachfolgend sind die einzelnen Schritte aufgeführt, die zum Anwenden einer Standardformatierung erforderlich sind:

  1. Rufe das entsprechende Standardformatobjekt ab. Das kann entweder GeoJsonPointStyle, GeoJsonLineStringStyle oder GeoJsonPolygonStyle sein.
  2. Wenden Sie die gewünschten Optionen auf das Format an.

Im nachfolgenden Codebeispiel wird gezeigt, wie du das Standardpunktformat so änderst, dass die Punkte mit einem Titel und Ausschnitt gezogen werden können.

Java


GeoJsonPointStyle pointStyle = layer.getDefaultPointStyle();
pointStyle.setDraggable(true);
pointStyle.setTitle("Hello, World!");
pointStyle.setSnippet("I am a draggable marker");

      

Kotlin


val pointStyle = layer.defaultPointStyle
pointStyle.isDraggable = true
pointStyle.title = "Hello, World!"
pointStyle.snippet = "I am a draggable marker"

      

Spezielle Formate für GeoJsonFeature

Alternativ können Sie einzelne Elemente in der Ebene mit Stilen versehen. So wenden Sie ein Format auf ein GeoJsonFeature an:

  1. Erstellen Sie das relevante Formatobjekt. Das kann entweder GeoJsonPointStyle, GeoJsonLineStringStyle oder GeoJsonPolygonStyle sein.
  2. Wenden Sie die gewünschten Optionen auf das Format an.
  3. Übergeben Sie das Formatobjekt an die relevante Methode von GeoJsonFeature. Das ist entweder setPointStyle(), setLineStringStyle() oder setPolygonStyle().

So können Sie beispielsweise das LineString-Format für GeoJsonFeature anpassen, damit die Farbe Rot ist.

Java


// Create a new feature containing a linestring
List<LatLng> lineStringArray = new ArrayList<LatLng>();
lineStringArray.add(new LatLng(0, 0));
lineStringArray.add(new LatLng(50, 50));
GeoJsonLineString lineString = new GeoJsonLineString(lineStringArray);
GeoJsonFeature lineStringFeature = new GeoJsonFeature(lineString, null, null, null);

// Set the color of the linestring to red
GeoJsonLineStringStyle lineStringStyle = new GeoJsonLineStringStyle();
lineStringStyle.setColor(Color.RED);

// Set the style of the feature
lineStringFeature.setLineStringStyle(lineStringStyle);

      

Kotlin


// Create a new feature containing a linestring
val lineStringArray: MutableList<LatLng> = ArrayList()
lineStringArray.add(LatLng(0.0, 0.0))
lineStringArray.add(LatLng(50.0, 50.0))
val lineString = GeoJsonLineString(lineStringArray)
val lineStringFeature = GeoJsonFeature(lineString, null, null, null)

// Set the color of the linestring to red
val lineStringStyle = GeoJsonLineStringStyle()
lineStringStyle.color = Color.RED

// Set the style of the feature
lineStringFeature.lineStringStyle = lineStringStyle

      

Demo-App ansehen

Ein Beispiel zum Importieren einer GeoJSON-Datei und Erstellen einer Ebene mithilfe dieser Datei finden Sie in der GeoJsonDemoActivity in der Demo-App, die im Lieferumfang der Dienstprogrammbibliothek enthalten ist. Im Einrichtungsleitfaden erhältst du Informationen zum Ausführen der Demo-App.