码云推荐 | 基于 ArcGIS Runtime 的3D移动应用程序框架

栏目: 编程工具 · 发布时间: 6年前

内容简介:组件式开发框架,兼容手机、平板多种设备。

RuntimeViewer

—— 基于ArcGIS Runtime 100.x开发的移动应用程序框架

组件式开发框架,兼容手机、平板多种设备。

平板模式

码云推荐 | 基于 ArcGIS Runtime 的3D移动应用程序框架

手机模式

码云推荐 | 基于 ArcGIS Runtime 的3D移动应用程序框架

如何快速运行应用程序?

  • 使用git工具下来工程并将工程导入Android Studio
  • 拷贝工程目录下/readme/工程结构示例/RuntimeViewer到手机存储根目录下(因为示例程序数据源均为离线)
  • 运行应用程序

框架使用说明

码云推荐 | 基于 ArcGIS Runtime 的3D移动应用程序框架

项目采用插件化结构设计,文件夹架构说明如下

  • Base —— 应用程序基类
  • BMOD —— 业务功能模块
    • MapModule —— 地图模块
    • ProjectsModule —— 工程列表模块
    • RootAct —— 应用程序启动页
    • SystemModule —— 系统功能模块
  • Common —— 公共功能
  • Config —— App配置信息、初始化信息
  • EventBus —— 事件中心
  • GloabApp —— 应用程序全局信息Application
  • Permission —— 权限控制
  • Utils —— 工具类
  • Widget —— 功能组件文件夹
    • Common —— 公共功能
    • LayerManagerWidget —— 图层管理
    • ……

配置文件说明

<?xml version="1.0" ?>
<!--
App配置文件
-->
<configuration>
    <!--Runtime 许可-->
	    <runtimekey license="runtimestandard,101,rud406482271,none,KGC63PJS3MLFLMZ59141"/>

    <!--系统工作空间目录-->
    <workspace path="/RuntimeViewer"/>

    <!--widget组件列表-->
    <widgetcontainer>
        <widget label="图层管理" classname="com.gisluq.runtimeviewer.Widgets.LayerManagerWidget.LayerManagerWidget"  config=""/>
        <widget label="工程信息" classname="com.gisluq.runtimeviewer.Widgets.ProjectInfoWidget.ProjectInfoWidget"  config=""/>
        <widget label="Hello World" classname="com.gisluq.runtimeviewer.Widgets.HelloWorldWidget" config=""/>
    </widgetcontainer>
</configuration>

说明:

  1. runtimekey的license为ArcGIS Runtime 1000.x许可信息,请获取后替换。
  2. workspace的path为系统工作空间目录,设置后app会自动初始化文件夹结构信息
  3. widget模块,label为应用程序名称,classname为对应widget类实体,程序加载过会自动初始化。必须填写。

框架功能模块开发

widget开发

1. 创建widget组件类

在Widgets目录下创建HelloWorldWidget.java文件并添加以下内容。 建议类名的命名规则为 [业务名称+Widget].java 以保证统一。

/**
 * 测试用组件
 * Created by gis-luq on 2018/3/10.
 */
public class HelloWorldWidget extends BaseWidget {

    public View mWidgetView = null;//
    /**
     * 组件面板打开时,执行的操作
     * 当点击widget按钮是, WidgetManager将会调用这个方法,面板打开后的代码逻辑.
     * 面板关闭将会调用 "inactive" 方法
     */
    @Override
    public void active() {

        super.active();//默认需要调用,以保证切换到其他widget时,本widget可以正确执行inactive()方法并关闭
        super.showWidget(mWidgetView);//加载UI并显示
        
        super.showMessageBox(super.name);//显示组件名称
    }

    /**
     * widget组件的初始化操作,包括设置view内容,逻辑等
     * 该方法在应用程序加载完成后执行
     */
    @Override
    public void create() {
        LayoutInflater mLayoutInflater = LayoutInflater.from(super.context);
        //设置widget组件显示内容
        mWidgetView = mLayoutInflater.inflate(R.layout.widget_view_helloworld,null);
    }

    /**
     * 组件面板关闭时,执行的操作
     * 面板关闭将会调用 "inactive" 方法
     */
    @Override
    public void inactive(){
        super.inactive();
    }

}

2. 创建widget组件UI

在android工程的layout文件夹下创建widget_view_helloworld.xml文件,并添加如下内容。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_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">

            <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、配置文件中添加对应内容

assents/config.xml下添加以下内容:

<widget label="Hello World" classname="com.gisluq.runtimeviewer.Widgets.HelloWorldWidget" config=""/>

码云推荐 | 基于 ArcGIS Runtime 的3D移动应用程序框架

widget整体效果 码云推荐 | 基于 ArcGIS Runtime 的3D移动应用程序框架

widget操作Mapview对象

每一个widget扩展了父类BaseWidget。使用以下方法就可以获取并操作mapview对象中的内容。

super.sceneView.getScene().getBasemap().getBaseLayers();
 super.sceneView.getScene().getOperationalLayers();

widget通信

widget通信通过引入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());
    //通过判断message内容执行不同方法
}

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());
}

更多内容请参考EventBus 3.0详细相关材料: https://www.cnblogs.com/whoislcj/p/5595714.html

Widget示例

图层管理 LayerManagerWidget

实现功能包括:基础底图数据加载、业务图层加载(目前仅支持Shapefile),图层开启关闭、透明度控制、图例等。

码云推荐 | 基于 ArcGIS Runtime 的3D移动应用程序框架

码云推荐 | 基于 ArcGIS Runtime 的3D移动应用程序框架

底图数据支持数据类型

  • tpk - LocalTiledPackage
  • server切片 - LocalServerCache
  • tiff - LocalGeoTIFF
  • 在线切片服务 - OnlineTiledMapServiceLayer
  • 在线动态图层 - OnlineDynamicMapServiceLayer

底图数据通过加载basemap.json实现,系统根目录/RuntimeViewer/XXX工程/BaseMap/basemap.json

文件内容如下,相关底图离线文件放在basemap.json所在文件夹即可。

{
    "baselayers": [
		{
            "name": "彩色中文含兴趣点版中国基础地图",
            "type": "OnlineTiledMapServiceLayer",
            "path": "http://map.geoq.cn/arcgis/rest/services/ChinaOnlineCommunity/MapServer",
            "layerIndex": 2,
            "visable": true,
            "opacity": 1
        },
		{
            "name": "午夜蓝色中文不含兴趣点版中国基础地图",
            "type": "OnlineTiledMapServiceLayer",
            "path": "http://map.geoq.cn/arcgis/rest/services/ChinaOnlineStreetPurplishBlue/MapServer",
            "layerIndex": 3,
            "visable": false,
            "opacity": 1
        }
    ]
}

以上所述就是小编给大家介绍的《码云推荐 | 基于 ArcGIS Runtime 的3D移动应用程序框架》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

图灵的秘密

图灵的秘密

Charles Petzold / 杨卫东 / 人民邮电出版社 / 2012-11 / 69.00元

图灵机是英国数学家阿兰•图灵提出的一种抽象计算模型,本书深入剖析了图灵这篇描述图灵机和可计算性的原始论文《论可计算数及其在判定性问题上的应用》。书中在详解论文的同时,也附带了大量的历史背景资料、图灵的个人经历,以及图灵机对于人们理解计算机、人类意识和宇宙所产生的影响。 本书适合所有计算机科学专业的学生、程序员或其他技术人员,同时也适合欲了解图灵生平及其构建图灵机的思维的读者阅读。一起来看看 《图灵的秘密》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换