Kurz: Načtení dat GeoJSON do sady Azure Mapy Android SDK
Tento kurz vás provede procesem importu souboru GeoJSON s daty o poloze do sady Azure Mapy Android SDK. V tomto kurzu se naučíte:
- Přidání Azure Mapy do aplikace pro Android
- Vytvořte zdroj dat a načtěte ho do souboru GeoJSON z místního souboru nebo webu.
- Zobrazení dat na mapě
- S daty na mapách můžete pracovat a zobrazit jejich podrobnosti.
Poznámka:
Vyřazení sady Azure Mapy Android SDK
Sada Azure Mapy Native SDK pro Android je teď zastaralá a bude vyřazena 31. 31. 25. Pokud se chcete vyhnout přerušení služeb, proveďte migraci do sady Azure Mapy Web SDK do 31. 31. 25. Další informace najdete v průvodci migrací sady Azure Mapy Android SDK.
Požadavky
- Dokončete rychlý start: Vytvoření aplikace pro Android. Tento kurz rozšiřuje kód použitý v tomto rychlém startu.
- Stáhněte si soubor GeoJSON s ukázkovými body zájmu.
Import dat GeoJSON z webové složky nebo složky assetů
Většina souborů GeoJSON zabalí všechna data v rámci souboru FeatureCollection
. S ohledem na tento scénář, pokud jsou soubory GeoJSON načteny do aplikace jako řetězec, lze je předat do statické fromJson
metody kolekce funkcí, která deserializuje řetězec do geoJSON FeatureCollection
objektu, který lze přidat do mapy.
Následující kroky ukazují, jak importovat soubor GeoJSON do aplikace a deserializovat jej jako GeoJSON FeatureCollection
objekt.
- Dokončete rychlý start: Vytvořte aplikaci pro Android podle následujících kroků, které jsou postavené na této aplikaci.
- Na panelu projektu android studia klikněte pravým tlačítkem na složku aplikace a přejděte na
New > Folder > Assets Folder
. - Přetáhněte soubor GeoJSON s ukázkovými body zájmu do složky assets.
- Přejděte do souboru MainActivity.java a do metody přidejte následující kód do zpětného
onCreate
volání událostimapControl.onReady
. Tento kód načte soubor SamplePoiDataSet.json ze složky assets do zdroje dat pomocíimportDataFromUrl
metody a pak ho přidá 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);
- Přejděte do souboru MainActivity.kt a do metody přidejte do zpětného
mapControl.onReady
onCreate
volání události následující kód. Tento kód načte soubor SamplePoiDataSet.json ze složky assets do zdroje dat pomocíimportDataFromUrl
metody a pak ho přidá 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);
- Pomocí kódu pro načtení dat GeoJSON a zdroje dat teď musíme určit, jak se mají tato data zobrazovat na mapě. Pro data bodů existuje několik různých vrstev vykreslování; Vrstva bublin, vrstva symbolů a vrstva heat mapy jsou nejčastěji používané vrstvy. Přidejte následující kód pro vykreslení dat ve vrstvě bubliny v zpětném volání události
mapControl.onReady
za kód pro import dat.
//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)
- Na panelu projektu android studia klikněte pravým tlačítkem myši na složku rozložení pod cestou
app > res > layout
a přejděte naNew > File
. Vytvořte nový soubor s názvem popup_text.xml. - Otevřete soubor popup_text.xml. Pokud se soubor otevře v zobrazení návrháře, klikněte pravým tlačítkem myši na obrazovku a vyberte Přejít na XML. Do tohoto souboru zkopírujte a vložte následující KÓD XML. Tento KÓD XML vytvoří jednoduché rozložení, které lze použít s automaticky otevíraným oknovým oknu a obsahuje textové zobrazení.
<?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>
- Vraťte se do souboru MainActivity.java a za kód bublinové vrstvy přidejte následující kód, který vytvoří opakovaně použitelné místní okno.
//Create a popup and add it to the map.
Popup popup = new Popup();
map.popups.add(popup);
//Close it initially.
popup.close();
- Vraťte se do souboru MainActivity.kt a za kód pro vrstvu bublin přidejte následující kód, který vytvoří opakovaně použitelné místní okno.
//Create a popup and add it to the map.
val popup = Popup()
map.popups.add(popup)
//Close it initially.
popup.close()
- Přidejte následující kód pro připojení
click
události k vrstvě bubliny. Když se klepne na bublinu ve vrstvě bubliny, událost se aktivuje a načte podrobnosti z vlastností vybrané funkce, vytvořte zobrazení pomocí souboru rozložení popup_text.xml , předejte ji jako obsah do místní nabídky a pak zobrazte místní okno na pozici funkcí.
//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)
Aplikaci spusťte. Mapa se zobrazí s bublinami překryvnými pro každé umístění v souboru GeoJSON. Klepnutím na libovolnou bublinu se zobrazí automaticky otevírané okno s názvem a typem entity funkce, na kterou se tato funkce dotkne.
Vyčištění prostředků
Pomocí následujících kroků vyčistíte prostředky z tohoto kurzu:
- Zavřete Android Studio a odstraňte aplikaci, kterou jste vytvořili.
- Pokud jste aplikaci otestovali na externím zařízení, odinstalujte aplikaci z daného zařízení.
Další kroky
Další příklady kódu a prostředí pro interaktivní psaní kódu: