Samouczek: ładowanie danych GeoJSON do zestawu Azure Mapy Android SDK
Ten samouczek przeprowadzi Cię przez proces importowania pliku GeoJSON danych lokalizacji do zestawu Azure Mapy Android SDK. Z tego samouczka dowiesz się, jak wykonywać następujące czynności:
- Dodawanie Mapy platformy Azure do aplikacji systemu Android.
- Utwórz źródło danych i załaduj go w pliku GeoJSON z pliku lokalnego lub sieci Web.
- Wyświetl dane na mapie.
- Interakcja z danymi na mapach w celu wyświetlenia ich szczegółów.
Uwaga
Wycofanie zestawu AZURE Mapy Android SDK
Zestaw Azure Mapy Native SDK dla systemu Android jest teraz przestarzały i zostanie wycofany w dniu 3.31.25. Aby uniknąć przerw w działaniu usługi, przeprowadź migrację do zestawu Sdk sieci Web usługi Azure Mapy do 31/31/25. Aby uzyskać więcej informacji, zobacz Przewodnik migracji zestawu SDK platformy Azure Mapy Android.
Wymagania wstępne
- Ukończ przewodnik Szybki start: tworzenie aplikacji dla systemu Android. Ten samouczek rozszerza kod używany w tym przewodniku Szybki start.
- Pobierz przykładowy plik GeoJSON punktów orientacyjnych.
Importowanie danych GeoJSON z folderu internetowego lub zawartości
Większość plików GeoJSON opakowuje wszystkie dane w obiekcie FeatureCollection
. Mając na uwadze ten scenariusz, jeśli pliki GeoJSON są ładowane do aplikacji jako ciąg, można je przekazać do metody statycznej fromJson
kolekcji funkcji, która deserializuje ciąg do obiektu GeoJSON FeatureCollection
, który można dodać do mapy.
W poniższych krokach pokazano, jak zaimportować plik GeoJSON do aplikacji i zdeserializować go jako obiekt GeoJSON FeatureCollection
.
- Ukończ przewodnik Szybki start: utwórz aplikację dla systemu Android, wykonując następujące kroki na podstawie tej aplikacji.
- W panelu projektu programu Android Studio kliknij prawym przyciskiem myszy folder aplikacji i przejdź do
New > Folder > Assets Folder
strony . - Przeciągnij i upuść plik GeoJSON z przykładowymi punktami zainteresowania do folderu zasobów.
- Przejdź do pliku MainActivity.java i dodaj następujący kod wewnątrz wywołania zwrotnego zdarzenia
mapControl.onReady
wewnątrzonCreate
metody . Ten kod ładuje plik SamplePoiDataSet.json z folderu zasobów do źródła danych przy użyciuimportDataFromUrl
metody , a następnie dodaje go do mapy.
//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);
- Przejdź do pliku MainActivity.kt i dodaj następujący kod wewnątrz wywołania zwrotnego zdarzenia
mapControl.onReady
wewnątrzonCreate
metody . Ten kod ładuje plik SamplePoiDataSet.json z folderu zasobów do źródła danych przy użyciuimportDataFromUrl
metody , a następnie dodaje go do mapy.
//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);
- Za pomocą kodu do załadowania danych GeoJSON źródło danych musimy teraz określić sposób wyświetlania tych danych na mapie. Istnieje kilka różnych warstw renderowania dla danych punktów; Warstwa bąbelkowa, warstwa symboli i warstwa mapy cieplnej to najczęściej używane warstwy. Dodaj następujący kod, aby renderować dane w warstwie bąbelkowej w wywołaniu zwrotnym zdarzenia
mapControl.onReady
po kodzie importowania danych.
//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)
- W panelu projektu programu Android Studio kliknij prawym przyciskiem myszy folder layout pod ścieżką
app > res > layout
i przejdź doNew > File
strony . Utwórz nowy plik o nazwie popup_text.xml. - Otwórz plik popup_text.xml. Jeśli plik zostanie otwarty w widoku projektanta, kliknij prawym przyciskiem myszy ekran i wybierz polecenie Przejdź do kodu XML. Skopiuj i wklej następujący kod XML do tego pliku. Ten kod XML tworzy prosty układ, który może być używany z wyskakującym okienkiem i zawiera widok tekstu.
<?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>
- Wróć do pliku MainActivity.java i po kodzie dla warstwy bąbelkowej dodaj następujący kod, aby utworzyć okno podręczne wielokrotnego użytku.
//Create a popup and add it to the map.
Popup popup = new Popup();
map.popups.add(popup);
//Close it initially.
popup.close();
- Wróć do pliku MainActivity.kt i po kodzie warstwy bąbelkowej dodaj następujący kod, aby utworzyć okno podręczne wielokrotnego użytku.
//Create a popup and add it to the map.
val popup = Popup()
map.popups.add(popup)
//Close it initially.
popup.close()
- Dodaj następujący kod, aby dołączyć
click
zdarzenie do warstwy bąbelkowej. Po naciśnięciu bąbelka w warstwie bąbelkowej zdarzenie jest uruchamiane i pobiera szczegóły z właściwości wybranej funkcji, utwórz widok przy użyciu pliku układu popup_text.xml , przekaż go jako zawartość do wyskakującego okienka, a następnie wyświetl wyskakujące okienko w pozycji funkcji.
//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)
Uruchom aplikację. Mapa jest wyświetlana z bąbelkami nakładanymi dla każdej lokalizacji w pliku GeoJSON. Naciśnięcie dowolnego bąbelka powoduje wyświetlenie wyskakującego okienka z nazwą i typem jednostki funkcji.
Czyszczenie zasobów
Wykonaj następujące kroki, aby wyczyścić zasoby z tego samouczka:
- Zamknij program Android Studio i usuń utworzoną aplikację.
- Jeśli aplikacja jest testowana na urządzeniu zewnętrznym, odinstaluj aplikację z tego urządzenia.
Następne kroki
Aby uzyskać dodatkowe przykłady kodu i zapoznać się z interaktywnym środowiskiem kodowania: