- Introduzione
- Aggiungi un GeoJson Layer alla mappa
- Rimuovi GeoJsonlayer
- Aggiungere e rimuovere un elemento GeoJsonFeature
- Accedere a GeoJsonFeatures e alle loro proprietà
- Applica uno stile a GeoJsonlayer e GeoJsonFeatures
- 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 livelloJSONObject
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.
- Recupera l'oggetto di stile predefinito pertinente, che può essere
GeoJsonPointStyle
,GeoJsonLineStringStyle
oGeoJsonPolygonStyle
. - 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
.
- Crea l'oggetto di stile pertinente. Può essere
GeoJsonPointStyle
,GeoJsonLineStringStyle
oGeoJsonPolygonStyle
. - Applica le opzioni desiderate allo stile.
- Passa l'oggetto di stile al
metodo pertinente su
GeoJsonFeature
, che saràsetPointStyle()
,setLineStringStyle()
osetPolygonStyle()
.
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.