Utilità GeoJSON per Android di Google Maps

Seleziona piattaforma: Android iOS JavaScript
  1. Introduzione
  2. Aggiungi un GeoJsonLayer alla tua mappa
  3. Rimuovi il GeoJsonLayer
  4. Aggiungere e rimuovere una funzionalità GeoJson
  5. Accedi a GeoJsonFeatures e alle sue proprietà
  6. Stile di GeoJsonLayer e GeoJsonFeatures
  7. 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 livello
  • JSONObject 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.

  1. Recupera l'oggetto di stile predefinito pertinente, che può essere uno GeoJsonPointStyle, GeoJsonLineStringStyle o GeoJsonPolygonStyle.
  2. 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.

  1. Crea l'oggetto di stile pertinente, che può essere GeoJsonPointStyle, GeoJsonLineStringStyle o GeoJsonPolygonStyle.
  2. Applica le opzioni desiderate sullo stile.
  3. Passa l'oggetto di stile al metodo pertinente su GeoJsonFeature, che sarà setPointStyle(), setLineStringStyle() o setPolygonStyle().

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.