- 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 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:
- Rufen Sie 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 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:
- 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()
.
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.