Utilità GeoJSON per Android di Google Maps

Seleziona la piattaforma: Android iOS JavaScript
  1. Introduzione
  2. Aggiungi un GeoJsonlayer alla mappa
  3. Rimuovi lo GeoJsonLayer
  4. Aggiungere e rimuovere un GeoJsonFeature
  5. Accedi a GeoJsonFeatures e le loro proprietà
  6. Applica gli stili GeoJsonlayer e GeoJsonFeatures
  7. Guarda l'app demo

Introduzione

GeoJSON è un'estensione dei dati JSON e rappresenta i dati geografici. Con questa utilità, puoi archiviare le 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 addLayerToMap() e removeLayerFromMap() rispettivamente. In modo analogo puoi aggiungere e rimuovere singole funzionalità chiamando addFeature() e removeFeature() e superando un GeoJsonFeature oggetto. Per accedere a queste funzionalità, può 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 agli elementi prima che vengano aggiunto al livello, richiamando getDefaultPointStyle(), getDefaultLineStringStyle() o getDefaultPolygonStyle() e impostazione delle opzioni di stile su ciascuno. In alternativa, puoi impostare lo stile per una singola GeoJsonFeature chiamando il numero setPointStyle(), setLineStringStyle() o setPolygonStyle() sul e passare l'oggetto di stile pertinente.

Aggiungi un GeoJsonlayer alla mappa

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

Per eseguire un'importazione da un JSONObject, occorre quanto segue:

  • GoogleMap oggetto in cui deve essere visualizzato il livello
  • JSONObject contenente i dati GeoJSON da aggiungere alla 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, avrai bisogno di quanto segue:

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

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 lo strato GeoJson

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 GeoJsonlayer, richiama removeLayerFromMap()

Kotlin



layer.removeLayerFromMap()

      

Java


layer.removeLayerFromMap();

      

Aggiungere e rimuovere una funzione GeoJsonFeature

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

Puoi creare GeoJsonFeature oggetti singolarmente e aggiungerli in GeoJsonLayer.

Supponiamo di aver creato una caratteristica contenente un punto a 0, 0 con una voce nelle sue 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 trasmettilo la caratteristica da aggiungere.

Kotlin



layer.addFeature(pointFeature)

      

Java


layer.addFeature(pointFeature);

      

Per rimuovere un elemento dopo averlo aggiunto al livello, richiama removeFeature() e passare l'elemento da rimuovere.

Kotlin



layer.removeFeature(pointFeature)

      

Java


layer.removeFeature(pointFeature);

      

Accedere a GeoJsonFeatures e alle relative proprietà

Per accedere a tutte le funzioni GeoJsonFeatures aggiunte al livello, puoi chiama getFeatures() sul GeoJsonLayer che che hai creato. Verrà restituito l'iterazione 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() in insieme al metodo getFeatures() per verificare se ogni ha una determinata proprietà e vi può accedere, 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 su GeoJSON Geometry

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

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

      

Definizione delle caratteristiche GeoJsonlayer e GeoJson

Puoi impostare stili predefiniti per un GeoJsonlayer oppure applicare stili a singoli elementi. nel livello.

Stili predefiniti

In un GeoJsonlayer puoi impostare stili predefiniti per qualsiasi punto, lineastringa 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. Qualsiasi le modifiche apportate allo stile predefinito verranno applicate anche a tutti gli elementi che utilizzano lo stile predefinito.

Per applicare uno stile predefinito, procedi nel seguente modo:

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

Ad esempio, il seguente esempio di codice mostra come modificare il punto predefinito che renderà 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 caratteristica GeoJson

In alternativa, puoi assegnare uno stile a singoli elementi nel livello. I passaggi per applicare uno stile su un GeoJsonFeature sono i seguenti.

  1. Crea l'oggetto di stile pertinente. Può essere un GeoJsonPointStyle, GeoJsonLineStringStyle o GeoJsonPolygonStyle.
  2. Applica allo stile le opzioni che preferisci.
  3. Passa l'oggetto di stile a il metodo pertinente in GeoJsonFeature, che verrà setPointStyle(), setLineStringStyle() o setPolygonStyle().

Ad esempio, questo è il modo in cui personalizzare lo stile linestring per GeoJsonFeature in modo che il suo 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

Ecco un esempio di importazione di un file GeoJSON da un URL e creazione di un livello dai un'occhiata a GeoJsonDemoActivity nell'app demo fornito insieme alla libreria di utility. La guida alla configurazione ti mostra come per eseguire l'app demo.