- Introduzione
- Aggiungi un GeoJsonLayer alla tua mappa
- Rimuovi il GeoJsonLayer
- Aggiungere e rimuovere una funzionalità GeoJson
- Accedi a GeoJsonFeatures e alle sue proprietà
- Stile di GeoJsonLayer e GeoJsonFeatures
- Scopri l'app demo
Introduzione
GeoJSON è un'estensione del formato di dati JSON e rappresenta i dati geografici. Grazie a questa utilità, puoi archiviare caratteristiche geografiche in formato GeoJSON e visualizzarle sotto forma di livello sopra la mappa. Per aggiungere e rimuovere i tuoi dati GeoJSON da e verso la mappa, chiama rispettivamente
addLayerToMap()
e removeLayerFromMap()
. Analogamente, puoi aggiungere e rimuovere singole funzionalità chiamando addFeature()
e removeFeature()
e trasmettendo un oggetto GeoJsonFeature
. Se vuoi accedere alle funzionalità, puoi chiamare getFeatures()
per ottenere un iterabile di tutti gli oggetti
GeoJsonFeature
che sono stati aggiunti al livello.
Puoi anche impostare gli stili predefiniti da applicare alle funzionalità prima che vengano aggiunte al livello, chiamando getDefaultPointStyle()
, getDefaultLineStringStyle()
o
getDefaultPolygonStyle()
e impostando le opzioni di stile su ciascuna.
In alternativa, puoi impostare lo stile per un singolo
GeoJsonFeature
chiamando setPointStyle()
,
setLineStringStyle()
o setPolygonStyle()
sulla
funzionalità e trasmettendo l'oggetto di stile pertinente.
Aggiungere un elemento GeoJsonLayer alla mappa
Per aggiungere un livello GeoJson alla mappa, crea prima un'istanza di una classe GeoJsonLayer. Esistono due modi per creare un'istanza di GeoJsonLayer.
Per eseguire l'importazione da una JSONObject
, hai bisogno di:
GoogleMap
oggetto in cui deve essere eseguito il rendering del livelloJSONObject
contenente i dati GeoJSON da aggiungere al livello
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)
Per eseguire l'importazione da un file GeoJSON locale, devi disporre di quanto segue:
GoogleMap
oggetto in cui deve essere eseguito il rendering del livello- File di risorse locali contenente i dati GeoJSON
Context
, necessario per aprire un file di risorse locale
Java
GeoJsonLayer layer = new GeoJsonLayer(map, R.raw.geojson_file, context);
Kotlin
val layer = GeoJsonLayer(map, R.raw.geojson_file, context)
Dopo aver creato GeoJsonLayer
, chiama
addLayerToMap()
per aggiungere i dati importati alla mappa:
Java
layer.addLayerToMap();
Kotlin
layer.addLayerToMap()
Rimuovi il GeoJsonLayer
Supponiamo che tu abbia aggiunto questo livello
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)
Per cancellare GeoJsonLayer, chiama removeLayerFromMap()
Java
layer.removeLayerFromMap();
Kotlin
layer.removeLayerFromMap()
Aggiungere e rimuovere un elemento GeoJsonFeature
Una funzionalità in GeoJSON è di tipo "funzionalità". Contiene una geometria, un membro della proprietà e, facoltativamente, un riquadro di delimitazione o un ID.
Puoi creare GeoJsonFeature
oggetti singolarmente e aggiungerli
a GeoJsonLayer
.
Supponiamo che tu abbia creato una caratteristica contenente un punto pari a 0, 0 con una voce nelle sue proprietà e nessun riquadro di delimitazione.
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)
Per aggiungere la funzionalità al livello, chiama addFeature()
e trasmettila per aggiungerla.
Java
layer.addFeature(pointFeature);
Kotlin
layer.addFeature(pointFeature)
Per rimuovere una funzionalità dopo averla aggiunta al livello, chiama removeFeature()
e trasmetti la funzionalità da rimuovere.
Java
layer.removeFeature(pointFeature);
Kotlin
layer.removeFeature(pointFeature)
Accedere a GeoJsonFeatures e alle loro proprietà
Per accedere a tutte le funzionalità GeoJson che sono state aggiunte al livello, puoi
chiamare getFeatures()
al numero GeoJsonLayer
che hai creato. Verrà restituito un iterabile di GeoJsonFeatures
a cui puoi accedere utilizzando un loop per ogni mostrato, come mostrato di seguito.
Java
for (GeoJsonFeature feature : layer.getFeatures()) { // Do something to the feature }
Kotlin
for (feature in layer.features) { // Do something to the feature }
Utilizza i metodi hasProperty()
e getProperty()
in combinazione con il metodo getFeatures()
per verificare se ogni funzionalità memorizzata ha una determinata proprietà e accedervi se esiste.
Java
if (feature.hasProperty("Ocean")) { String oceanProperty = feature.getProperty("Ocean"); }
Kotlin
if (feature.hasProperty("Ocean")) { val oceanProperty = feature.getProperty("Ocean") }
Eventi clic geometria GeoJSON
Puoi utilizzare GeoJsonLayer.OnFeatureClickListener()
per ascoltare gli eventi di clic sugli
elementi geometrici sulla mappa. L'esempio seguente registra il titolo di una funzionalità quando l'utente la seleziona:
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")}") }
Applica stili a GeoJsonLayer e GeoJsonFeatures
Puoi impostare stili predefiniti per un GeoJsonLayer o stili per singole funzionalità nel livello.
Stili predefiniti
In GeoJsonLayer, puoi impostare gli stili predefiniti per tutti i punti, le stringhe di linee e i poligoni aggiunti al livello. Gli stili predefiniti vengono applicati solo se l'elemento non ha uno stile impostato per nessuna delle sue geometrie. Le modifiche apportate allo stile predefinito verranno applicate anche a tutte le funzionalità che utilizzano lo stile predefinito.
Per applicare uno stile predefinito, procedi nel seguente modo.
- Recupera l'oggetto di stile predefinito pertinente, che può essere uno
GeoJsonPointStyle
,GeoJsonLineStringStyle
oGeoJsonPolygonStyle
. - Applica le opzioni desiderate sullo stile.
Ad esempio, il seguente esempio di codice mostra come modificare lo stile dei punti predefinito, il che rende i punti trascinabili con un titolo e uno snippet.
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"
Stili specifici per un elemento GeoJsonFeature
In alternativa, puoi modificare le singole funzionalità nel livello. Per applicare uno stile a un GeoJsonFeature
, segui questi passaggi.
- Crea l'oggetto di stile pertinente, che può essere
GeoJsonPointStyle
,GeoJsonLineStringStyle
oGeoJsonPolygonStyle
. - Applica le opzioni desiderate sullo stile.
- Passa l'oggetto di stile al metodo pertinente su
GeoJsonFeature
, che saràsetPointStyle()
,setLineStringStyle()
osetPolygonStyle()
.
Ad esempio, ecco come personalizzare lo stile della stringa di riga per un GeoJsonFeature
in modo che sia di colore rosso.
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
Visualizza l'app demo
Per un esempio di importazione di un file GeoJSON da un URL e di creazione di un livello
con questo codice, dai un'occhiata a GeoJsonDemoActivity
nell'app demo che viene fornita con la libreria di utilità. La guida alla configurazione ti mostra come eseguire l'app demo.