1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/gis-luq-RuntimeViewer

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

RuntimeViewer

— Базирующийся на ArcGIS Runtime 100.x мобильный приложение-фреймворк

Компонентный фреймворк разработки, совместимый с различными устройствами, такими как смартфон и планшет.

Планшетный режим

Мобильный режим

Как быстро запустить приложение?

  • Используйте Git для загрузки проекта и импорта его в Android Studio
  • Копируйте папку /readme/structure примера RuntimeViewer в корневую директорию хранения устройства (так как данные примера являются офлайн)
  • Запустите приложение

Инструкция использования фреймворка

Проект использует плагинную архитектуру, описание структуры файлов приведено ниже

  • Base — Основные классы приложения
  • BMOD — Модули бизнес-функциональности
    • MapModule — Модуль карт
    • ProjectsModule — Модуль списка проектов
    • RootAct — Начальная страница приложения
    • SystemModule — Модуль системных функций
  • Common — Общие модули
  • Config — Конфигурационные данные приложения, начальные данные
  • EventBus — Центр событий
  • GlobalApp — Глобальные данные приложения Application
  • Permission — Управление правами доступа
  • Utils — Вспомогательные классы
  • Widget — Папка компонентов функциональности
    • Common — Общие модули
    • LayerManagerWidget — Менеджер слоёв
    • ...Конфигурационные файлы ==============
<?xml version="1.0" ?>
<!--
Файл конфигурации приложения
-->
<configuration>
    <!--Runtime ключ лицензии-->
    <runtimekey license="Лицензионная информация для ArcGIS Runtime 1000.x."/>

    <!--Системная рабочая директория-->
    <workspace path="/RuntimeViewer"/>

    <!--Контейнер компонентов-->
    <widgetcontainer>
        <widget label="Менеджер слоёв" classname="com.gisluq.runtimeviewer.Widgets.LayerManagerWidget.LayerManagerWidget" config=""/>
        <widget label="Информация о проектах" classname="com.gisluq.runtimeviewer.Widgets.ProjectInfoWidget.ProjectInfoWidget" config=""/>
        <widget label="Привет, мир!" classname="com.gisluq.runtimeviewer.Widgets.HelloWorldWidget" config=""/>
    </widgetcontainer>
</configuration>

Объяснение:

  1. Лицензионная информация для runtimekey должна быть заменена на информацию лицензии ArcGIS Runtime 1000.x.
  2. Путь для workspace указывает на системную рабочую директорию; после установки приложение автоматически инициализирует структуру файлов.
  3. Модуль компонента, метка является названием приложения, имя класса должно быть указано для каждого компонента. Это обязательное поле.

Фреймворк функциональных модулей разработки

Разработка виджета

1. Создание класса компонента виджета

Создайте файл HelloWorldWidget.java в директории Widgets со следующим содержимым.
Рекомендация по названию класса: [Название_Бизнеса + Widget].java, чтобы обеспечить единообразие.

/**
 * Пример компонента
 * Created by gis-luq on 2018/3/10.
 */
public class HelloWorldWidget extends BaseWidget {
``````java
public class HelloWorldWidget extends AppWidgetProvider {

    public View mWidgetView = null;

    /**
     * Operations performed when the component panel opens
     * When the widget button is pressed, the WidgetManager calls this method to start logic after opening the panel.
     * The "inactive" method will be called upon closing the panel.
     */
    @Override
    public void onEnabled() {

        super.onEnabled(); // By default, it must be called to ensure proper execution of inactive() when switching to another widget
        super.updateAppWidget(mWidgetView); // Loading UI and displaying it
        super.showToast(super.getName()); // Displaying the name of the component
    }

    /**
     * Initialization of the widget component, including setting content view and logic
     * This method is executed after the application has finished loading
     */
    @Override
    public void onUpdate(Context context) {
        LayoutInflater inflater = LayoutInflater.from(context);
        // Setting the content display for the widget component
        mWidgetView = inflater.inflate(R.layout.widget_view_helloworld, null);
    }

    /**
     * Operations performed when the component panel closes
     * The "inactive" method will be called upon closing the panel
     */
    @Override
    public void onDisabled(Context context) {
        super.onDisabled(context);
    }
}

2. Creating the UI Component Widget

Create a file named widget_view_helloworld.xml in your project's layout folder with the following contents:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
</LinearLayout>
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="fill_parent"
        android:padding="10dp">

        <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="Информация" />

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:paddingTop="5dp">
``````xml
<Button
    style="?android:attr/buttonStyleSmall"
    android:layout_width="match_parent"
    android:layout_height="40dp"
    android:text="Целевое расположение"
    android:id="@+id/widget_view_helloworld_button2"
    android:background="@drawable/ic_touch_btn"
    android:textColor="@color/white" />
</RelativeLayout>
<LinearLayout>
    <LinearLayout>

3. Настройка файла конфигурации

Добавьте следующий контент в assets/config.xml:

<widget label="Привет, мир!" classname="com.gisluq.runtimeviewer.Widgets.HelloWorldWidget" config=""/>

Общее представление виджета

Виджет в режиме планшета

Виджет в режиме мобильного устройства

Операция объекта Mapview в виджете

Каждый виджет расширяет родительский класс BaseWidget. Используйте следующие методы для получения и управления содержимым объекта mapview.

super.mapView.getMap().getBasemap().getBaseLayers(); // Получение базового слоя карты
super.mapView.getMap().getOperationalLayers(); // Получение операционного слоя карты

Коммуникация между виджетами

Коммуникация между виджетами реализуется с помощью EventBus 3.0. Базовое использование представлено ниже:#### 1. Подписка

EventBus.getDefault().register(this); // Подписаться

2. Отмена подписки

EventBus.getDefault().unregister(this); // Отменить подписку

3. Отправка события

EventBus.getDefault().post(new MessageEvent("Сообщение о событии"));

4. Обработка события подписки

@Subscribe(threadMode = ThreadMode.MAIN) // Выполняется в UI потоке
public void onDataSynEvent(MessageEvent event) {
    Log.e(TAG, "event---->" + event.getMessage());
    // По выполнению условия сообщения выполняются различные методы
}

Параметр threadMode имеет четыре значения:

  • MAIN — UI главный поток
  • BACKGROUND — фоновый поток
  • POSTING — тот же поток, что и отправитель
  • ASYNC — асинхронный поток

5. Приоритет события подписки

Приоритет события аналогичен приоритету широковещательной рассылки, высокий приоритет позволяет быстрее получить сообщение.

@Subscribe(threadMode = ThreadMode.MAIN, priority = 100) // Выполняется в UI потоке с приоритетом 100
public void onDataSynEvent(DataSynEvent event) {
    Log.e(TAG, "event---->" + event.getCount());
}

Дополнительные материалы можно найти здесь: https://www.cnblogs.com/whoislcj/p/5595714.html

Пример виджета

Управление слоями Widget LayerManagerWidget

Функционал включает базовое загрузка данных карты, загрузку бизнес-слоев (в настоящее время поддерживаются только Shapefiles), управление открытыми и закрытыми слоями, регулирование прозрачности, легендами и т.д.

 #### Поддерживаемые типы данных для основных слоев

  • tpk - LocalTiledPackage
  • серверные срезы - LocalServerCache
  • tiff - LocalGeoTIFF
  • онлайн-срезы - OnlineTiledMapServiceLayer
  • онлайн-динамические слои - OnlineDynamicMapServiceLayer
  • vtpk - LocalVectorTilePackage
Основные слои загружаются через basemap.json. Файл находится в корневой директории системы /RuntimeViewer/XXX проекта/BaseMap/basemap.json.

Содержимое файла представлено ниже. Относительные файлы с данными должны находиться в той же папке, что и basemap.json.

{
    "baselayers": [
		{
            "name": "Оффлайн vtpk",
            "type": "LocalVectorTilePackage",
            "path": "china.vtpk",
            "layerIndex": 1,
            "visible": true,
            "opacity": 1
        },
		{
            "name": "Цветной китайский картографический слой с интересными местами",
            "type": "OnlineTiledMapServiceLayer",
            "path": "http://map.geoq.cn/arcgis/rest/services/ChinaOnlineCommunity/MapServer",
            "layerIndex": 2,
            "visible": true,
            "opacity": 1
        },
		{
            "name": "Ночной синий китайский картографический слой без интересных мест",
            "type": "OnlineTiledMapServiceLayer",
            "path": "http://map.geoq.cn/arcgis/rest/services/ChinaOnlineStreetPurplishBlue/MapServer",
            "layerIndex": 3,
            "visible": false,
            "opacity": 1
        }
    ]
}

Элементный поиск Widget QueryWidget

Функционал включает поиск атрибутов по карте, поиск карты по атрибутам.

 ### Редактирование элементов Widget FeatureEditWidget Функционал включает создание точечных, линейных и полигональных элементов на основе shapefile, редактирование атрибутов, прикрепление мультимедийных файлов (фото, видео, аудиозаписи).

Расчетный виджет CalculateWidget

Функционал включает получение координат, расчет длин и площадей.

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Мобильная прикладная среда, разработанная на основе ArcGIS Runtime 100.x. Развернуть Свернуть
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/gis-luq-RuntimeViewer.git
git@api.gitlife.ru:oschina-mirror/gis-luq-RuntimeViewer.git
oschina-mirror
gis-luq-RuntimeViewer
gis-luq-RuntimeViewer
master