Utilità GeoJSON per Android di Google Maps

Seleziona la piattaforma: Android iOS JavaScript
  1. Introduzione
  2. Aggiungi un GeoJson Layer alla mappa
  3. Rimuovi GeoJsonlayer
  4. Aggiungere e rimuovere un elemento GeoJsonFeature
  5. Accedere a GeoJsonFeatures e alle loro proprietà
  6. Applica uno stile a GeoJsonlayer e GeoJsonFeatures
  7. Guarda l'app demo

Introduzione

GeoJSON è un'estensione del formato dati JSON e rappresenta i dati geografici. Con questa utilità, puoi archiviare gli elementi geografici in formato GeoJSON e visualizzarli come un livello sopra la mappa. Per aggiungere e rimuovere i tuoi dati GeoJSON nella e dalla mappa, chiama rispettivamente addLayerToMap() e removeLayerFromMap(). Allo stesso modo, puoi aggiungere e rimuovere singole caratteristiche chiamando addFeature() e removeFeature() e passando un oggetto GeoJsonFeature. Se vuoi accedere alle funzionalità, puoi chiamare getFeatures() per ottenere un'iterazione di tutti gli oggetti GeoJsonFeature che sono stati aggiunti al livello.

Puoi anche impostare gli stili predefiniti da applicare alle caratteristiche prima che vengano aggiunte al livello chiamando getDefaultPointStyle(), getDefaultLineStringStyle() o getDefaultPolygonStyle() e impostando le opzioni di stile per ciascuna funzionalità. In alternativa, puoi impostare lo stile per una singola GeoJsonFeature chiamando setPointStyle(), setLineStringStyle() o setPolygonStyle() sulla caratteristica e passando l'oggetto di stile pertinente.

Aggiunta di un GeoJson Layer alla mappa

Per aggiungere un livello GeoJson alla mappa, crea prima un'istanza di una classe GeoJsonlayer. Esistono due modi per creare un'istanza del GeoJsonlayer.

Per eseguire l'importazione da un JSONObject, devi disporre di:

  • GoogleMap oggetto in cui deve essere visualizzato il livello
  • JSONObject contenente i dati GeoJSON da aggiungere al livello

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

      

Per eseguire l'importazione da un file GeoJSON locale, devi disporre di:

  • GoogleMap oggetto in cui deve essere visualizzato il livello
  • File delle risorse locali contenente i dati GeoJSON
  • Context, necessario per aprire un file di risorse locale

Kotlin



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

      

Java


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

      

Dopo aver creato GeoJsonLayer, chiama addLayerToMap() per aggiungere i dati importati alla mappa:

Kotlin



layer.addLayerToMap()

      

Java


layer.addLayerToMap();

      

Rimuovi GeoJson Layer

Supponiamo di aver aggiunto questo strato

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

      

Per cancellare il GeoJson Layer, chiama removeLayerFromMap()

Kotlin



layer.removeLayerFromMap()

      

Java


layer.removeLayerFromMap();

      

Aggiunta e rimozione di un elemento GeoJsonFeature

Una funzionalità in GeoJSON è di tipo "feature". Contiene una geometria, un membro della proprietà e, facoltativamente, un riquadro di delimitazione o un ID.

Puoi creare singoli oggetti GeoJsonFeature e aggiungerli a GeoJsonLayer.

Supponiamo di aver creato una funzionalità contenente un punto in corrispondenza di 0, 0 con una voce nelle relative proprietà e nessun riquadro di delimitazione.

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

      

Per aggiungere l'elemento al livello, chiama addFeature() e trasmetti l'elemento da aggiungere.

Kotlin



layer.addFeature(pointFeature)

      

Java


layer.addFeature(pointFeature);

      

Per rimuovere una funzionalità dopo averla aggiunta al livello, chiama removeFeature() e trasmetti la caratteristica da rimuovere.

Kotlin



layer.removeFeature(pointFeature)

      

Java


layer.removeFeature(pointFeature);

      

Accedere a GeoJsonFeatures e alle loro proprietà

Per accedere a tutte le GeoJsonFeatures che sono state aggiunte al livello, puoi chiamare getFeatures() nel GeoJsonLayer che hai creato. Verrà restituito un iterabile di GeoJsonFeatures a cui puoi accedere utilizzando un ciclo for-each come mostrato di seguito.

Kotlin



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

      

Java


for (GeoJsonFeature feature : layer.getFeatures()) {
    // Do something to the feature
}

      

Utilizza i metodi hasProperty() e getProperty() insieme al metodo getFeatures() per verificare se ogni funzionalità archiviata ha una determinata proprietà e accedervi se esiste.

Kotlin



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

      

Java


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

      

Eventi di clic geometrici di GeoJSON

Puoi utilizzare GeoJsonLayer.OnFeatureClickListener() per rimanere in ascolto degli eventi di clic sugli elementi geometrici della mappa. L'esempio seguente registra il titolo di una funzionalità quando l'utente fa clic su di essa:

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

      

Applica uno stile a GeoJsonlayer e GeoJsonFeatures

Puoi impostare stili predefiniti per un GeoJsonlayer o definire singole caratteristiche nel livello.

Stili predefiniti

In un GeoJsonlayer puoi impostare stili predefiniti per qualsiasi punto, lineastringa e poligono aggiunti al livello. Gli stili predefiniti vengono applicati solo se l'elemento non dispone di uno stile impostato per nessuna delle sue geometrie. Eventuali modifiche apportate allo stile predefinito verranno applicate anche a tutte le funzionalità che lo utilizzano.

Per applicare uno stile predefinito, segui la procedura riportata di seguito.

  1. Recupera l'oggetto di stile predefinito pertinente, che può essere GeoJsonPointStyle, GeoJsonLineStringStyle o GeoJsonPolygonStyle.
  2. Applica le opzioni desiderate allo stile.

Ad esempio, il seguente esempio di codice mostra come modificare lo stile punto predefinito, rendendo i punti trascinabili con un titolo e uno snippet.

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

      

Stili specifici di una funzionalità GeoJson

In alternativa, puoi definire lo stile dei singoli elementi nel livello. Di seguito sono riportati i passaggi per applicare uno stile a un elemento GeoJsonFeature.

  1. Crea l'oggetto di stile pertinente. Può essere GeoJsonPointStyle, GeoJsonLineStringStyle o GeoJsonPolygonStyle.
  2. Applica le opzioni desiderate allo 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 linestring per un elemento GeoJsonFeature in modo che il colore sia rosso.

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

      

Guarda l'app demo

Per un esempio di importazione di un file GeoJSON da un URL e di creazione di un livello con quest'ultimo, dai un'occhiata a GeoJsonDemoActivity nell'app demo fornita con la libreria di utilità. La guida alla configurazione mostra come eseguire l'app demo.