Поделиться через


Руководство. Загрузка данных GeoJSON в пакет SDK для Android для Azure Карты

В этом руководстве показано, как импортировать GeoJSON-файл с данными о расположении в пакет SDK Azure Maps для Android. В этом руководстве описано следующее:

  • добавление Azure Maps в приложение Android;
  • создание источника данных и загрузка данных в GeoJSON-файл из локального файла или из Интернета;
  • отображение данных на карте.
  • взаимодействие с данными на картах для просмотра сведений о них.

Примечание.

Прекращение использования пакета SDK для Android для Azure Карты

Пакет SDK для машинного кода Azure для Android Карты теперь устарел и будет прекращен 3.31.25. Чтобы избежать сбоев в работе служб, перейдите в веб-пакет SDK для Azure Карты на 3.31.25. Дополнительные сведения см. в руководстве по миграции пакета SDK для Android Карты Azure.

Необходимые компоненты

  1. Выполните краткое руководство. Создание приложения Android. Это руководство расширяет код, используемый в этом кратком руководстве.
  2. Скачайте пример GeoJSON-файла с точками интереса.

Импорт данных GeoJSON из Интернета или из папки assets

В большинстве файлов GeoJSON все данные включены в объект FeatureCollection. Учитывая этот сценарий, если файлы GeoJSON загружаются в приложение в виде строки, их можно передать в статический fromJson метод коллекции компонентов, который десериализирует строку в объект GeoJSON FeatureCollection , который можно добавить на карту.

Ниже показано, как импортировать GeoJSON-файл в приложение и десериализовать его в GeoJSON-объект FeatureCollection.

  1. Выполните краткое руководство. Создайте приложение Android, как показано ниже.
  2. На панели проекта в Android Studio щелкните правой кнопкой мыши папку app и выберите New > Folder > Assets Folder.
  3. Перетащите пример GeoJSON-файла с точками интереса в папку assets.
  1. Откройте файл MainActivity.java и добавьте приведенный ниже код в обратный вызов для события mapControl.onReady внутри метода onCreate. Этот код загружает файл SamplePoiDataSet.json из папки ресурсов в источник данных с помощью метода importDataFromUrl, а затем добавляет его на карту.
//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. Откройте файл MainActivity.kt и добавьте приведенный ниже код в обратный вызов для события mapControl.onReady внутри метода onCreate. Этот код загружает файл SamplePoiDataSet.json из папки ресурсов в источник данных с помощью метода importDataFromUrl, а затем добавляет его на карту.
//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. Используя код для загрузки данных GeoJSON из источника данных, нам теперь необходимо указать, как эти данные должны отображаться на карте. Существует несколько слоев отрисовки для данных точек. Наиболее часто используются слой пузырьков, слой символов и слой тепловой карты. Чтобы данные отображались на слое пузырьков, добавьте приведенный ниже код в обратный вызов для события mapControl.onReady после кода для импорта данных.
//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. На панели проекта в Android Studio щелкните правой кнопкой мыши папку layout по пути app > res > layout и перейдите к New > File. Создайте новый файл под именем popup_text.xml.
  2. Откройте файл popup_text.xml. Если файл откроется в представлении конструктора, щелкните правой кнопкой мыши экран и выберите "Перейти к XML". Скопируйте и вставьте в файл указанный ниже код XML. Этот XML-код создает простой макет, который можно использовать со всплывающим окном и который содержит текстовое представление.
<?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. Вернитесь в файл MainActivity.java и после кода для слоя пузырьков добавьте следующий код, чтобы создать всплывающее окно с возможностью повторного использования.
//Create a popup and add it to the map.
Popup popup = new Popup();
map.popups.add(popup);

//Close it initially.
popup.close();
  1. Вернитесь в файл MainActivity.kt и после кода для слоя пузырьков добавьте следующий код, чтобы создать всплывающее окно с возможностью повторного использования.
//Create a popup and add it to the map.
val popup = Popup()
map.popups.add(popup)

//Close it initially.
popup.close()
  1. Добавьте следующий код, чтобы подключить click событие к пузырькового слоя. При нажатии пузырькового слоя событие запускается и извлекает сведения из свойств выбранной функции, создайте представление с помощью файла макета popup_text.xml , передайте его в виде содержимого во всплывающее окно, а затем отобразите всплывающее окно в позиции признаков.
//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. Запустите приложение. Карта отображается с пузырьками, наложенными для каждого расположения в файле GeoJSON. При нажатии на любой пузырь отображается всплывающее окно с именем и типом сущности функции, касаемой.

    Карта данных из файла GeoJSON; при нажатии на местоположение открывается всплывающее окно

Очистка ресурсов

Чтобы очистить ресурсы, используемые при работе с этим руководством, сделайте следующее:

  1. Закройте Android Studio и удалите созданное приложение.
  2. Если вы тестировали приложение на внешнем устройстве, удалите приложение с этого устройства.

Следующие шаги

Дополнительные примеры кода и сведения о возможностях интерактивного программирования см. здесь: