Компонентный фреймворк разработки, совместимый с различными устройствами, такими как смартфон и планшет.
Проект использует плагинную архитектуру, описание структуры файлов приведено ниже
<?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>
Объяснение:
runtimekey
должна быть заменена на информацию лицензии ArcGIS Runtime 1000.x.workspace
указывает на системную рабочую директорию; после установки приложение автоматически инициализирует структуру файлов.Создайте файл 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);
}
}
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>
Добавьте следующий контент в assets/config.xml
:
<widget label="Привет, мир!" classname="com.gisluq.runtimeviewer.Widgets.HelloWorldWidget" config=""/>
Каждый виджет расширяет родительский класс BaseWidget. Используйте следующие методы для получения и управления содержимым объекта mapview.
super.mapView.getMap().getBasemap().getBaseLayers(); // Получение базового слоя карты
super.mapView.getMap().getOperationalLayers(); // Получение операционного слоя карты
Коммуникация между виджетами реализуется с помощью EventBus 3.0. Базовое использование представлено ниже:#### 1. Подписка
EventBus.getDefault().register(this); // Подписаться
EventBus.getDefault().unregister(this); // Отменить подписку
EventBus.getDefault().post(new MessageEvent("Сообщение о событии"));
@Subscribe(threadMode = ThreadMode.MAIN) // Выполняется в UI потоке
public void onDataSynEvent(MessageEvent event) {
Log.e(TAG, "event---->" + event.getMessage());
// По выполнению условия сообщения выполняются различные методы
}
Параметр threadMode
имеет четыре значения:
MAIN
— UI главный потокBACKGROUND
— фоновый потокPOSTING
— тот же поток, что и отправительASYNC
— асинхронный потокПриоритет события аналогичен приоритету широковещательной рассылки, высокий приоритет позволяет быстрее получить сообщение.
@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
Функционал включает базовое загрузка данных карты, загрузку бизнес-слоев (в настоящее время поддерживаются только Shapefiles), управление открытыми и закрытыми слоями, регулирование прозрачности, легендами и т.д.
#### Поддерживаемые типы данных для основных слоев
/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 FeatureEditWidget
Функционал включает создание точечных, линейных и полигональных элементов на основе shapefile, редактирование атрибутов, прикрепление мультимедийных файлов (фото, видео, аудиозаписи).
Функционал включает получение координат, расчет длин и площадей.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )