Google Maps Android GeoJSON-Hilfsprogramm

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 können Sie geografische Elemente im GeoJSON-Format speichern und als Ebene, die über eine Karte gelegt wird, darstellen. Rufen Sie addLayerToMap() bzw. removeLayerFromMap() auf, um Ihre 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 der Karte hinzufügen

Um Ihrer Karte eine GeoJson-Ebene hinzuzufügen, erstellen Sie zuerst eine Instanz der Klasse „GeoJsonLayer“. Es gibt zwei Möglichkeiten, 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

Kotlin



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

      

Java


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

      

Für den Import aus einer GeoJSON-Datei benötigen Sie 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

Kotlin



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

      

Java


GeoJsonLayer layer = new 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:

Kotlin



layer.addLayerToMap()

      

Java


layer.addLayerToMap();

      

GeoJsonLayer entfernen

Angenommen, Sie haben diese Ebene hinzugefügt:

Kotlin



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

      

Java


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

      

Rufen Sie zum Löschen von GeoJsonLayer removeLayerFromMap() auf.

Kotlin



layer.removeLayerFromMap()

      

Java


layer.removeLayerFromMap();

      

GeoJsonFeature hinzufügen und entfernen

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

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

Angenommen, Sie haben ein Element erstellt, das einen Punkt an 0,0 mit einem Eintrag in den Eigenschaften und ohne Begrenzungsrahmen enthält.

Kotlin



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

      

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);

      

Rufen Sie addFeature() auf, um das Element zu übergeben und der Ebene hinzuzufügen.

Kotlin



layer.addFeature(pointFeature)

      

Java


layer.addFeature(pointFeature);

      

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

Kotlin



layer.removeFeature(pointFeature)

      

Java


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).

Kotlin



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

      

Java


for (GeoJsonFeature feature : layer.getFeatures()) {
    // 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.

Kotlin



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

      

Java


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

      

GeoJSON-Geometrie-Klickereignisse

Mit GeoJsonLayer.OnFeatureClickListener() lassen sich Klickereignisse für die Geometrieelemente der Karte erfassen. Im folgenden Beispiel wird der Titel eines Elements protokolliert, wenn der Nutzer darauf klickt:

Kotlin



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

      

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"));
    }
});

      

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 Element keine Formatvorlagensätze für eine ihrer Geometrien vorhanden sind. Jede Änderung, die Sie an der Standardformatierung vornehmen, wirkt sich auf alle Elemente aus, auf die diese Standardformatierung angewandt wird.

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

  1. Rufen Sie 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 Sie das Standardpunktformat so ändern, dass die Punkte mit einem Titel und Ausschnitt ziehbar werden.

Kotlin



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

      

Java


GeoJsonPointStyle pointStyle = layer.getDefaultPointStyle();
pointStyle.setDraggable(true);
pointStyle.setTitle("Hello, World!");
pointStyle.setSnippet("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().

Beispielsweise können Sie das LineString-Format für GeoJsonFeature so anpassen, dass als Farbe Rot verwendet wird.

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

      

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);

      

Demo-App ansehen

Ein Beispiel zum Importieren einer GeoJSON-Datei aus einer URL und Erstellen einer Ebene mithilfe dieser Datei finden Sie in der GeoJsonDemoActivity der Demo-App, die mit der Dienstprogrammbibliothek ausgeliefert wird. Im Einrichtungsleitfaden erhalten Sie Informationen zum Ausführen der Demo-App.