- Einführung
- GeoJsonLayer zu einer Karte hinzufügen
- GeoJsonLayer entfernen
- GeoJsonFeature hinzufügen und entfernen
- GeoJsonFeatures und ihre Attribute aufrufen
- GeoJsonLayer und GeoJsonFeatures formatieren
- 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:
- Rufe das entsprechende Standardformatobjekt ab. Das kann entweder
GeoJsonPointStyle
,GeoJsonLineStringStyle
oderGeoJsonPolygonStyle
sein. - 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:
- Erstellen Sie das relevante Formatobjekt. Das kann entweder
GeoJsonPointStyle
,GeoJsonLineStringStyle
oderGeoJsonPolygonStyle
sein. - Wenden Sie die gewünschten Optionen auf das Format an.
- Übergeben Sie das Formatobjekt an die relevante Methode von
GeoJsonFeature
. Das ist entwedersetPointStyle()
,setLineStringStyle()
odersetPolygonStyle()
.
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.