Compartilhar via


Tutorial: Carregar dados GeoJSON no SDK do Android do Azure Mapas

Este tutorial orienta você pelo processo de importação de um arquivo GeoJSON de dados de localização para o SDK do Android do Azure Mapas. Neste tutorial, você aprenderá como:

  • Adicionar o Azure Mapas a um aplicativo Android.
  • Criar uma fonte de dados e carregá-la em um arquivo GeoJSON de um arquivo local ou da Web.
  • Exibir os dados do mapa.
  • Interaja com os dados nos mapas para exibir os detalhes.

Observação

Desativação do SDK do Android do Azure Mapas

O SDK Nativo do Azure Mapas para Android já foi preterido e será desativado em 31/03/25. Para evitar interrupções de serviço, migre para o SDK da Web do Azure Mapas até 31/03/25. Para obter mais informações, confira O guia de migração do SDK do Android do Azure Mapas.

Pré-requisitos

  1. Conclua o Início Rápido: Criar um aplicativo Android. Este tutorial estenderá o código usado naquele guia de início rápido.
  2. Baixe o arquivo GeoJSON Exemplos de Pontos de Interesse.

Importar dados GeoJSON da pasta de ativos ou da Web

A maioria dos arquivos GeoJSON encapsula todos os dados em uma FeatureCollection. Com isso em mente, se os arquivos GeoJSON forem carregados no aplicativo como uma cadeia de caracteres, eles poderão ser transmitidos para o método fromJson estático da coleção de recursos, que vai desserializar a cadeia de caracteres em um objeto GeoJSON FeatureCollection que pode ser adicionado ao mapa.

As etapas a seguir mostram como importar um arquivo GeoJSON para o aplicativo e desserializá-lo como um objeto FeatureCollection GeoJSON.

  1. Conclua o Início Rápido: Criar um aplicativo Android, pois as etapas a seguir se baseiam nesse aplicativo.
  2. No painel do projeto do Android Studio, clique com o botão direito do mouse na pasta app e acesse New > Folder > Assets Folder.
  3. Arraste e solte o arquivo GeoJSON Exemplo de Pontos de Interesse na pasta ativos.
  1. Acesse o arquivo MainActivity.java e adicione o código a seguir dentro do retorno de chamada para o evento mapControl.onReady localizado dentro do método onCreate. Esse código carrega o arquivoSamplePoiDataSet.jsno da pasta ativos em uma fonte de dados usando o método importDataFromUrl e, em seguida, adiciona-o ao mapa.
//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);
  1. Acesse o arquivo MainActivity.kt e adicione o código a seguir dentro do retorno de chamada para o evento mapControl.onReady localizado dentro do método onCreate. Esse código carrega o arquivoSamplePoiDataSet.jsno da pasta ativos em uma fonte de dados usando o método importDataFromUrl e, em seguida, adiciona-o ao mapa.
//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);
  1. Usando o código para carregar os dados GeoJSON e a fonte de dados, agora precisamos especificar como esses dados devem ser exibidos no mapa. Há várias camadas de renderização diferentes para dados de ponto: Camada de bolha, Camada de símbolo e Camada do mapa de calor são as usadas com mais frequência. Adicione o código a seguir para renderizar os dados em uma camada de bolha no retorno de chamada para o evento mapControl.onReady depois do código para importar os dados.
//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)
  1. No painel do projeto do Android Studio, clique com o botão direito do mouse na pasta layout, no caminho app > res > layout e acesse New > File. Crie um novo arquivo chamado popup_text.xml.
  2. Abra o arquivo popup_text.xml. Se o arquivo for aberto em um modo de exibição de designer, clique com o botão direito do mouse na tela e selecione Acessar o XML. Copie e cole o seguinte XML neste arquivo. Esse XML cria um layout simples que pode ser usado com um pop-up e que contém uma exibição de texto.
<?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>
  1. Volte para o arquivo MainActivity.java e depois do código da camada de bolha, adicione o código a seguir para criar um pop-up reutilizável.
//Create a popup and add it to the map.
Popup popup = new Popup();
map.popups.add(popup);

//Close it initially.
popup.close();
  1. Volte para o arquivo MainActivity.kt e depois do código da camada de bolha, adicione o código a seguir para criar um pop-up reutilizável.
//Create a popup and add it to the map.
val popup = Popup()
map.popups.add(popup)

//Close it initially.
popup.close()
  1. Adicione o código a seguir para anexar click um evento à camada de bolha. Quando uma bolha na camada de bolha for tocada, o evento será acionado e recuperará alguns detalhes das propriedades do recurso selecionado, criará uma exibição usando o arquivo de layout popup_text.xml, o passará como conteúdo para o pop-up e, em seguida, mostrará o pop-up na posição dos recursos.
//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)
  1. Execute o aplicativo. Um mapa será exibido com bolhas sobrepostas para cada localização no arquivo GeoJSON. Tocar em qualquer bolha exibirá um pop-up com o nome e o tipo de entidade do recurso tocado.

    Mapa de dados de um arquivo GeoJSON exibido com um pop-up sendo aberto quando a localização é tocada

Limpar os recursos

Siga as seguintes etapas para limpar os recursos deste tutorial:

  1. Feche o Android Studio e exclua o aplicativo que você criou.
  2. Se você testou o aplicativo em um dispositivo externo, desinstale-o desse dispositivo.

Próximas etapas

Para ver mais exemplos de código e uma experiência interativa de codificação: