1、前言

今天再一次在官网看到了ArcGIS Runtime SDK for Android下一个版本“Quartz”版的更新资料,它将是一个非常重要的更新,包括API接口的重构和开发思路的调整。具体如下图所示:

ArcGIS Runtime SDK概述一文中已经给大家介绍了ArcGIS Runtime SDK for Android的前世今生,从2011年6月发布ArcGIS Runtime SDK for Android beta版开始,到2015年10月1日发布ArcGIS Runtime SDK for Android 10.2.7 。期间大大小小经历了十几个大小版本的迭代。期间功能不断完善,从一开始API提供的在线地图浏览功能的到后期逐渐加入的离线矢量,离线分析、离在线一体化数据生产流程。功能也越来越丰富。但是不论怎么变化API结构始终没有发生过大的调整。仔细研究现有API的结构时我们也不难发现一些现象,同样功能的类函数会出现在多个包里面,有时候给人有点晕的感觉,例如:com.esri.core.tasks.ags.query 和 com.esri.core.tasks.query 同样是query,但是因为支持的查询同步异步方式的不同,就直接成为了两个类。再比如对于图层类ArcGISFeatureLayer继承于GraphicsLayer支持要素的在线编辑修改,GraphicsLayer继承于基类Layer。FeatureLayer继承于基类Layer支持离线数据源的加载,这些开发的时候都是需要深入了解并理清楚思路的,并且需要特别注意。
从API从开发者的角度来说有没有更简单更高效的一种方式呢,接口更加简单清晰? 我想这也是“Quartz”版目标之一。

“Quartz”版重构API结构使接口更清晰。大的调整即将到来。

转载请注明出处:http://www.cnblogs.com/gis-luq/p/4923469.html

2、现有版本分析

官网地址:https://developers.arcgis.com/android/

ArcGIS Android 10.2.7 API 结构图

类结构是大家多年来所熟悉的样子,但是确实不够清晰明了(对比于新版来说)。

举个简单例子,在10.2.7及之前的版本里。整个地图的容器为MapView,在MapView类可以执行地图的一些基本操作,例如图层管理。放大、缩小、平移、相关事件监听。例如我们要显示一张地图;具体过程如下:

1)、设置应用程序Activity的UI信息

打开res>>layout>>activity_main.xml文件,添加Mapview的UI信息

<com.esri.android.map.MapView
android:id="@+id/map"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
</com.esri.android.map.MapView>

2)   新建MapView并设置UI和代码的绑定

private MapView mapView = null;
private ArcGISTiledMapServiceLayer arcGISTiledMapServiceLayer = null; this.mapView = (MapView)this.findViewById(R.id.map);//设置UI和代码绑定

3)   新建地图图层并添加到MapView中

String strMapUrl="http://map.geoq.cn/ArcGIS/rest/services/ChinaOnlineCommunity/MapServer";
this.arcGISTiledMapServiceLayer = new ArcGISTiledMapServiceLayer(strMapUrl);
this.mapView.addLayer(arcGISTiledMapServiceLayer);

4)  至此一张简单的地图就添加完成了

更多配置过程可以参考文章 《基于Android Studio构建ArcGIS Android开发环境》

3、未来版本分析

官网地址:https://developers.arcgis.com/android/beta/

ArcGIS Android “Quartz”版 API 结构图

对于“Quartz”版,类名包名首先进行了调整,同时在接口使用上也有一定的改动。首先在“Quartz”版中采用MVC结构进行重构(MVC结构一般包括模型、视图、控制器),增加了一个Map类,Map代表了模型,用于存储地图数据源,一般来说包含一个底图图层及若干业务图层数据。MapView代表了视图,用于直接和用户交互,但是已经不负责对Layer的直接管理和操作了,内容的操作主要通过Map来实现管理,这个在API接口方法中也有体现。对于显示一张底图的过程如下:

1)、设置应用程序Activity的UI信息

打开res>>layout>>activity_main.xml文件,添加Mapview的UI信息

    <com.esri.arcgisruntime.mapping.view.MapView
android:id="@+id/mapViewLayout"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
</com.esri.arcgisruntime.mapping.view.MapView>

2)、新建MapView

 private MapView mMapView;

2)、设置MapView资源绑定、及相关图层数据的设置

 //设置MapView UI和代码的绑定
mMapView = (MapView) findViewById(R.id.mapViewLayout);
//利用在线的服务创建一个切片图层
String strMapUrl="http://map.geoq.cn/ArcGIS/rest/services/ChinaOnlineCommunity/MapServer";
ArcGISTiledLayer tiledLayerBaseMap = new ArcGISTiledLayer(strMapUrl);
//设置切片图层作为底图
Basemap basemap = new Basemap(tiledLayerBaseMap);
//创建一个map包含basemap地图数据
Map map = new Map(basemap);
//设置mao显示的视图MapView中
mMapView.setMap(map);

从上面的代码我们可以看出,结构上已经变成了遵循MVC结构的模式,MapView已经不负责直接对Layer的管理。

4、结语

从量变到质变,新的API已经悄无声息的的开始内测,对于开发者来说免不了又是新的一轮学习和适应。但是更简洁的结构,统一的风格设计,支持二维以及三维的数据显示,这一切还是值得我们期待的。

最后附上2015Esri全球用户大会top10的QA 中关于“Quartz”的说明。

今年在用户大会,用户交流以及Developer Showcase Island上你将会听到团队提出“Quartz”,它是ArcGIS Runtime SDK下一个大版本的代号。这一版本包括了一系列显著的功能增强,正式版本预期于2016年第一季度发行,之前会有几个beta版本发行,第一个测试版定 于2015年8月发行。
ArcGIS Runtime Quartz版本的新功能,包括:
1) 地图性能改进
2)
支持更多数据格式,矢量数据包括移动地理数据库(Runtime
geodatabase),shapefile文件,KML;栅格图像主要包括JPEG, JPEG2000, NITF, GeoTIFF,
MrSID,CADRG, ECRG, DTED, SRTM,
HRE以及激光雷达。此外,还支持OGC的GeoPackage,以及自定义的矢量和栅格数据源
3) 本地分析在内的更多GIS分析功能
4) 支持智能制图,矢量切片和读写在线地图的功能
5) 支持3D场景,浏览、分析3D数据
6) 支持Xamarin,允许.NET开发人员构建跨平台运行的应用程序。

“ArcGIS发展的重要计划有哪些?长期的路线图是怎样的?”

引用其中一句话 “未来12个月,ArcGIS Web and Runtime SDKs将完全支持3D,允许设备应用建立在Runtime和Web上,充分利用3D工作流和信息产品的优势。” 伴随着“Quartz”版,ArcGIS 移动3D时代即将到来。

最新文章

  1. .NET垃圾回收(GC)原理
  2. Stream Player control
  3. win8安装mean.io详解
  4. linux source与 . 命令
  5. Android——关于Activity跳转的返回(无返回值和有返回值)——有返回值
  6. LeetCode(169)Majority Element and Majority Element II
  7. Java-在线聊天系统-非线程
  8. gets--vs--fgets
  9. Mysql 细节记忆
  10. ORACLE EBS R12 FOR LINUX 开机后如何启动数据库、应用脚本[Z]
  11. PHP While 循环
  12. vue路由信息对象
  13. python全栈开发day110-Flask基础语法
  14. [EFCore]EntityFrameworkCore Code First 当中批量自定义列名
  15. [Leetcode]827.使用回溯+标记解决最大人工岛问题
  16. AttributeError: type object &#39;testClass&#39; has no attribute &#39;testMothod&#39;
  17. ssh 登陆进去后, .bashrc 也没有被执行
  18. CentOS7 更换OpenStack-queens源
  19. hibernate 在做更新和删除的时候一定要把事务开启
  20. python sort与sorted使用笔记

热门文章

  1. .net mvc 框架实现后台管理系统 3
  2. 了解Linux系统
  3. POJ2528 Mayor&#39;s posters(线段树+离散化)
  4. django 自带的验证功能
  5. 在U盘打造个性化PE工具箱+KALI(Persistence)+存储的工作站
  6. va_list arg_list va_start(arg_list, format) va_end( arg_list ) 原理的理解
  7. 命令行模式运行jmeter,主从方式运行jmeter
  8. Selenium打开IE报错“Protected Mode settings...”解决方法
  9. Java基础13-数组算法
  10. Android多线程源码学习笔记一:handler、looper、message、messageQueue