Esercitazione: Caricare dati GeoJSON in Mappe di Azure Android SDK
Questa esercitazione illustra il processo di importazione di un file GeoJSON dei dati di posizione in Android SDK per Mappe di Azure. In questa esercitazione apprenderai a:
- Aggiungere Mappe di Azure a un'applicazione Android.
- Creare un'origine dati e caricarla in un file GeoJSON da un file locale o dal Web.
- Visualizzare i dati sulla mappa.
- Interagire con i dati sulle mappe per visualizzarne i dettagli.
Nota
ritiro di Android SDK Mappe di Azure
Il Mappe di Azure Native SDK per Android è ora deprecato e verrà ritirato il 3/31/25. Per evitare interruzioni del servizio, eseguire la migrazione all'SDK Web di Mappe di Azure entro il 3/31/25. Per altre informazioni, vedere La guida alla migrazione di Android SDK Mappe di Azure.
Prerequisiti
- Completare la guida introduttiva: Creare un'app Android. Questa esercitazione estende il codice usato in tale avvio rapido.
- Scaricare il file GeoJSON dei punti di interesse di esempio.
Importare i dati GeoJSON dal Web o dalla cartella assets
La maggior parte dei file GeoJSON esegue il wrapping di tutti i dati in un oggetto FeatureCollection
. Tenendo presente questo scenario, se i file GeoJSON vengono caricati nell'applicazione come stringa, possono essere passati al metodo statico fromJson
della raccolta di funzionalità, che deserializza la stringa in un oggetto GeoJSON FeatureCollection
che può essere aggiunto alla mappa.
I passaggi seguenti illustrano come importare un file GeoJSON nell'applicazione e deserializzarlo come oggetto GeoJSON FeatureCollection
.
- Completare l'argomento di avvio rapido: Creare un'app Android come procedura seguente in base a questa applicazione.
- Nel pannello del progetto di Android Studio fare clic con il pulsante destro del mouse sulla cartella dell'app e passare a
New > Folder > Assets Folder
. - Trascinare e rilasciare il file GeoJSON dei punti di interesse di esempio nella cartella assets.
- Passare al file MainActivity.java e aggiungere il codice seguente all'interno del callback per l'evento
mapControl.onReady
, all'interno delonCreate
metodo . Questo codice carica il file SamplePoiDataSet.json dalla cartella assets in un'origine dati usandoimportDataFromUrl
il metodo e quindi lo aggiunge alla mappa.
//Create a data source and add it to the map.
DataSource source = new DataSource();
//Import the geojson data and add it to the data source.
source.importDataFromUrl("asset://SamplePoiDataSet.json");
//Add data source to the map.
map.sources.add(source);
- Passare al file MainActivity.kt e aggiungere il codice seguente all'interno del callback per l'evento
mapControl.onReady
all'interno delonCreate
metodo . Questo codice carica il file SamplePoiDataSet.json dalla cartella assets in un'origine dati usandoimportDataFromUrl
il metodo e quindi lo aggiunge alla mappa.
//Create a data source and add it to the map.
DataSource source = new DataSource();
//Import the geojson data and add it to the data source.
source.importDataFromUrl("asset://SamplePoiDataSet.json");
//Add data source to the map.
map.sources.add(source);
- Usando il codice per caricare i dati GeoJSON un'origine dati, è ora necessario specificare la modalità di visualizzazione dei dati sulla mappa. Sono disponibili diversi livelli di rendering per i dati dei punti. Il livello bolla, il livello simbolo e il livello mappa termica sono i livelli usati più di frequente. Aggiungere il codice seguente per eseguire il rendering dei dati in un livello bolla nel callback per l'evento
mapControl.onReady
dopo il codice per l'importazione dei dati.
//Create a layer and add it to the map.
BubbleLayer layer = new BubbleLayer(source);
map.layers.add(layer);
//Create a layer and add it to the map.
val layer = new BubbleLayer(source)
map.layers.add(layer)
- Nel pannello del progetto di Android Studio fare clic con il pulsante destro del mouse sulla cartella di layout sotto il percorso
app > res > layout
e passare aNew > File
. Creare un nuovo file denominato popup_text.xml. - Aprire il file popup_text.xml . Se il file viene aperto in una visualizzazione della finestra di progettazione, fare clic con il pulsante destro del mouse sullo schermo e scegliere Vai a XML. Copiare e incollare il codice XML seguente in questo file. Questo codice XML crea un layout semplice che può essere usato con un popup e contiene una visualizzazione testo.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:orientation="vertical"
android:background="#ffffff"
android:layout_margin="8dp"
android:padding="10dp"
android:layout_height="match_parent">
<TextView
android:id="@+id/message"
android:layout_width="wrap_content"
android:text=""
android:textSize="18dp"
android:textColor="#222"
android:layout_height="wrap_content"
android:width="200dp"/>
</RelativeLayout>
- Tornare al file MainActivity.java e dopo il codice per il livello bolla aggiungere il codice seguente per creare un popup riutilizzabile.
//Create a popup and add it to the map.
Popup popup = new Popup();
map.popups.add(popup);
//Close it initially.
popup.close();
- Tornare al file MainActivity.kt e, dopo il codice per il livello bolla, aggiungere il codice seguente per creare un popup riutilizzabile.
//Create a popup and add it to the map.
val popup = Popup()
map.popups.add(popup)
//Close it initially.
popup.close()
- Aggiungere il codice seguente per associare un
click
evento al livello bolla. Quando viene toccata una bolla nel livello bolla, l'evento viene attivato e recupera i dettagli dalle proprietà della funzionalità selezionata, creare una visualizzazione usando il file di layout popup_text.xml , passarlo come contenuto nel popup, quindi visualizzare il popup nella posizione delle funzionalità.
//Add a click event to the layer.
map.events.add((OnFeatureClick)(feature) -> {
//Get the first feature and it's properties.
Feature f = feature.get(0);
JsonObject props = f.properties();
//Retrieve the custom layout for the popup.
View customView = LayoutInflater.from(this).inflate(R.layout.popup_text, null);
//Display the name and entity type information of the feature into the text view of the popup layout.
TextView tv = customView.findViewById(R.id.message);
tv.setText("%s\n%s",
f.getStringProperty("Name"),
f.getStringProperty("EntityType")
);
//Get the position of the clicked feature.
Position pos = MapMath.getPosition((Point)f.geometry());
//Set the options on the popup.
popup.setOptions(
//Set the popups position.
position(pos),
//Set the anchor point of the popup content.
anchor(AnchorType.BOTTOM),
//Set the content of the popup.
content(customView)
);
//Open the popup.
popup.open();
//Return a boolean indicating if event should be consumed or continue to bubble up.
return false;
}, layer);
//Add a click event to the layer.
map.events.add(OnFeatureClick { feature: List<Feature> ->
//Get the first feature and it's properties.
val f = feature[0]
val props = f.properties()
//Retrieve the custom layout for the popup.
val customView: View = LayoutInflater.from(this).inflate(R.layout.popup_text, null)
//Display the name and entity type information of the feature into the text view of the popup layout.
val tv = customView.findViewById<TextView>(R.id.message)
tv.text = String.format(
"%s\n%s",
f.getStringProperty("Name"),
f.getStringProperty("EntityType")
)
//Get the position of the clicked feature.
val pos = MapMath.getPosition(f.geometry() as Point?)
//Set the options on the popup.
popup.setOptions( //Set the popups position.
position(pos), //Set the anchor point of the popup content.
anchor(AnchorType.BOTTOM), //Set the content of the popup.
content(customView)
)
//Open the popup.
popup.open()
//Return a boolean indicating if event should be consumed or continue to bubble up.
false
} as OnFeatureClick, layer)
Eseguire l'applicazione. Viene visualizzata una mappa con bolle sovrapposte per ogni posizione nel file GeoJSON. Toccando su qualsiasi bolla viene visualizzato un popup con il nome e il tipo di entità della funzionalità toccata.
Pulire le risorse
Per pulire le risorse di questa esercitazione, seguire questa procedura:
- Chiudere Android Studio ed eliminare l'applicazione creata.
- Se l'applicazione è stata testata in un dispositivo esterno, disinstallarla da tale dispositivo.
Passaggi successivi
Per altri esempi di codice e un'esperienza di codifica interattiva: