1、前言
ArcGIS Runtime SDK是一整套用于构建原生及跨平台的地图应用程序的开发包,包括移动设备的Android、iOS、Windows Phone,针对桌面的.Net、Java、OSX,以及跨平台的QT。这所有的API基于一个共同的C++内核,并在不同平台上做了对应的封装,使得在多平台下的接口风格和编程模型相一致。当我们在一个平台上学会了对应sdk的开发流程,在其他平台上如果我们对该平台比较熟也可以很快的将知识结构平移过去,快速的适应新平台的开发工作。
2、ArcGIS Runtime SDKs产品家族
相信大部分开发者对ArcGIS Runtime SDKs这个名称并不生疏,它实际上包含了一系列SDKs,用来开发应用于桌面和移动设备的应用程序。在10.2.2之前的版本中,ArcGIS Runtime SDKs包括ArcGIS Runtime SDK for Android、iOS、Windows Phone、Windows Mobile、JavaSE、QT、OS X、Windows Store及WPF共9种。
2014年3月10号,正式发布了Runtime SDK的部分10.2.2版本,我们也初步窥见了10.2.2 Runtime SDK的新成员。在10.2.2的版本中,Esri对Runtime SDKs进行了重新整合,合并或重新设计了一些SDK。
从下表中可以看出,Esri是计划将原来的Runtime SDK for Windows Phone、Windows Store以及WPF这3大SDK整合成一个,他们都是基于.NET技术,开发应用于Windows平台上的应用,不过可能由于WPF SDK的技术架构有些特别,整合的工作量比较大,因此重写了SDK for .Net,并暂时保留了WPF SDK;并且由于Windows Mobile系统已经很老,Esri在新的Runtime SDKs体系中也并未打算对其进行继续升级。
因此,10.2.2版本中,正式向用户推荐的SDKs主要有Android、iOS、.Net、Qt、OS X和Java这6种,主要是在Windows平台上的开发包有较大改动,进行了大量的整合,我想这对.Net开发者们来说真是一个极好的消息。新的Runtime SDKs包括:
10.2.2之前的Runtime SDKs |
10.2.2版本的Runtime SDKs |
面向的操作系统 |
ArcGIS Runtime SDK for Android |
ArcGIS Runtime SDK for Android |
Android |
ArcGIS Runtime SDK for iOS |
ArcGIS Runtime SDK for iOS |
iOS |
ArcGIS Runtime SDK for Windows Phone |
ArcGIS Runtime SDK for .Net |
Windows Desktop(for WPF开发者) Windows Store(Windows 8.1) Windows Phone 8 |
ArcGIS Runtime SDK for Windows Store |
||
ArcGIS Runtime SDK for WPF |
ArcGIS Runtime SDK for WPF |
Windows Desktop |
ArcGIS Runtime SDK for Windows Mobile |
—— |
—— |
ArcGIS Runtime SDK for QT |
ArcGIS Runtime SDK for Qt |
Windows、Linux(64/32bit) |
ArcGIS Runtime SDK for OS X |
ArcGIS Runtime SDK for OS X |
Mac(Mountain Lion(OS X 10.8)及以上) |
ArcGIS Runtime SDK for JavaSE |
ArcGIS Runtime SDK for Java |
Windows、Linux(64/32bit) |
ArcGIS Runtime SDKs for Smartphones and Tablets是Esri为开发者提供的移动应用开发包的统称,Smartphones and Tablets的意思是“智能手机和平板”,顾名思义就知道包括面向Android、iOS和Windows Phone这三大主流移动操作系统的SDKs。在上个小节中已经提到,以后就没有ArcGIS Runtime SDK for Windows Phone了,统一归到了ArcGIS Runtime SDK for .Net旗下。
在ArcGIS 10.2.2版本之前,用户只要注册了Esri全球账号,就可以在Esri的官网上免费下载各个Runtime SDKs安装包以及其它资料,并基于此进行免费的应用程序开发和部署;但10.2.2版本之后,Esri的移动产品授权策略发生了一些变化,开始区分开发版、基础版和标准版。针对不同的需求我们选择的版本不同收费策略也将不同。
3、ArcGIS Runtime SDK for Android产品简介
ArcGIS Runtime SDK for Android包括一个用于Android Studio的lib-project,用于eclipse等环境的jar函数库,提供了丰富的工具、文档和示例,使用户能够使用Java构建移动应用程序(这些应用程序将运用ArcGIS for Server提供的强大的制图、地理编码、地理处理和自定义功能)并将它们部署到Android系统的智能手机和平板上。
ArcGIS Runtime SDK for Android可以通过ArcGIS for Server REST服务获取数据和服务资源。Esri发布了GeoServices REST Specification,这一标准规定了ArcGIS REST Service各种接口的访问参数及返回数据的结构,ArcGIS Runtime SDK for Android正是基于这一标准封装的。其实,ArcGIS基于REST接口的API,包括ArcGIS Runtime SDK for Android/iOS/Windows Phone,ArcGIS API for Flex/ Silverlight/ JavaScript,以及ArcGIS Runtime SDK for Java/.NET,都是基于这一标准进行封装的。尽管不同平台、不同语言的开发包有其自己的特性,但其对应服务端的编程模型是一致的。下图能很好的说明这一点。
除了ArcGIS for Server,ArcGIS Runtime SDK for Android还可以通过Portal API轻松访问ArcGIS Online和Portal for ArcGIS上的资源,即与云建立密切的联系。另外,在10.2的版本中,ArcGIS Android SDK也能使用本地离线的数据,作为应用的重要数据源,这也是10.2的重大更新,被多数用户和开发者所关注,后面教程中也会详细介绍。截止目前写稿为止,ArcGIS Runtime SDK for Android最新版本是10.2.6-u2。有关ArcGIS Runtime SDK for Android 10.2.6-u2的所有资料,包括安装包下载、系统支持、安装环境说明、API接口说明、Sample、在线帮助等,都能从最新的ArcGIS for Developer站点https://developers.arcgis.com/android/查找到。
4、ArcGIS Runtime SDK for Android发展历程
ArcGIS for Android从产品上来讲分为两个部分,一是给开发者准备的ArcGIS Runtime SDK for Android开发包,专用来开发Android设备上的移动GIS应用;另一个是名为“ArcGIS”的app,它使用ArcGIS Runtime SDK for Android开发包开发,具备常用的和典型的GIS功能,拿来即用,并可在Google Play等商店免费下载。
ArcGIS Runtime SDK for Android开发包的发展历程如下:
- 约在2011年6月份,发布ArcGIS Runtime SDK for Android beta版,就是开发者常说的0.9版本。它是一个测试版本,支持2.1,2.2的android系统。因为是第一个支持android智能操作系统的版本,虽然是测试版,也备受开发者关注。这个版本中,可以使用ArcGIS for Server中的地图服务、要素服务来进行移动端的地图浏览和简单查询操作,使用设备的GPS坐标,等等;
- 2011年12月14日,发布了ArcGIS Runtime SDK for Android v1.0.1,这是第一个正式版的Android SDK。该正式版包含了beta全部功能,对其中一些bug进行了修复,并新增了许多功能,重要的功能如支持本地缓存的松散型切片,迈出了离线应用的第一步;总体上的功能已经比较完善,包括与Online和Portal的集成,使用设备的GPS,进行简单的外业数据采集和编辑,使用Server和Online上的分析功能,能进行identify操作,可以显示popup up,进行高级的几何计算等。为以后的版本功能提升提供了较好的原型;与0.9版本比较,1.0及以后的版本,SDK架构发生了很大的变化,主要变化在于核心功能改由C/C++编写,SDK层(Java)通过JNI的方式调用,以此提高效率。因此,需要支持OpenGL ES2.0的GPU。
- 2012年4月7日,发布ArcGIS Runtime SDK for Android v1.1。这个版本的改进主要是增加了高级符号,支持一个应用中多个MapView,以及Group Layer中支持对所有子图层的操作,另外,与Online和Portal的结合更加深入,可以搜索组织的内容、用户、组等信息;
- 2012年5月10日,发布ArcGIS Runtime SDK for Android v1.1.1版本。这个版本仅对v1.1版本进行了一个修复——让Eclipse能够更好的、更正确的识别Android依赖库;
- 2012年6月22日,发布ArcGIS Runtime SDK for Android v2.0版本。这个版本最大的变化是对云的支持全面加强,支持ArcGIS 10.1的桌面、服务器和云产品,并正式推出Portal API来操作云中的资源。可以说这是在云计算的兴起之下,Esri的“云端”应用模式的全面体现。同时,发布了同步的ArcGIS app for Android v2.0版本,也是全面的加强与云的集成;
- 2013年1月16日,发布ArcGIS Runtime SDK for Android v10.1.1版本。这个版本中新增了对网络分析、PKI认证的加密服务的支持,新增对KML、WMS、OpenStreetMap等第三方地图服务的支持;更为重要的是,Runtime SDK的版本号从这个版本开始发生了巨大的变化,从2.0直接升级到了10.1.1,同时,其它Runtime SDK(包括Java SE, WPF, Windows Phone等)版本号全部都更新至10.1.1;
- 2013年7月1日,发布ArcGIS Runtime SDK for Android v10.1.1 update 1。这个版本的升级变化也很小,主要是支持了Android Support Library 13,并支持ArcGIS Online上的OAuth2类型的资源的访问;同时,这个版本提供了Javadoc;
- 2013年10月29日,发布ArcGIS Runtime SDK for Android v10.2版本。10.2版本与之前的版本相比变化较大,一是新增了很多类和框架来辅助开发人员开发,如MapOptions和Application Framework for ArcGIS Android框架;同时,GraphicsLayer新增动态模式,性能极大提升;GeometryEngine中也新增了很多诸如测地线、偏移量、椭圆等方法来完成几何计算;另一方面,更大的变化是推出了Beta版的离线功能,提供相应的类和接口,来实现业务数据的离线存储、编辑,以及离线的地理编码和路径分析功能,这是国内用户需求最大、备受关注的功能之一,因此一经推出便引起广泛关注。只可惜这些离线的功能只是Beta版,并且需要10.2.1的Desktop和Server产品配合使用,因此离线功能并不能真正用于实践;
- 2014年3月8日,发布ArcGIS Runtime SDK for Android v10.2.2版本。这个版本有两个最大的变化,一是正式推出了离线功能,10.2版本中Beta版的离线功能全部正式对用户提供,包括离线的要素编辑和同步,离线的地理编码,离线的路径分析功能,以及按需动态缓存地图切片到移动端等;另一大变化是授权的变化。ArcGIS Runtime SDK统一变更了授权方式,未经过授权的用户只可使用其中基础的功能,并且应用程序在分发时还会打上水印。
- 2014年4月21日,发布ArcGIS Runtime SDK for Android v10.2.3版本。这个版本的主要变化在于它提供了一个全新的GeodatabaseFeatureServiceTable类来使用ArcGIS Feature Services,达到同时使用离线和在线数据的目的。
- 2014年10月6日,发布ArcGIS Runtime SDK for Android v10.2.4版本。在这个版本中,更新了最低支持Android平台版本的android 4.0.1(API级别14)。直接支持本地矢量格式和栅格格式,包括shapefiles、KML、geopackages,可以直接影像数据,包括:ASRP/USRP、CIB1,5,10、DTED0, 1, 2、GeoPackage、GeoTIFF、HFA、HRE、IMG、JPEG、JPEG2000、NITF、PNG、RPF、SRTM1, 2。支持离线的空间分析功能,视线和视域分析(beta)(暂不支持x86设备),优化GeodatabaseFeatureServiceTable,使得在线离线都可以使用功能单一的API。网络地图服务得到了增强,支持了WMTS服务、Imager服务。离线API的质量得到了改进,包括地图的行为和性能改、callout显示增强。
- 2015年1月15日,发布ArcGIS Runtime SDK for Android v10.2.5版本。支持android studio开发环境,示例代码默认开发环境基于Android Studio。Eclipse插件被弃用。从版本10.2.5,Esri公司不再提供的Eclipse IDE工具插件的形式,但是,它是可以继续使用jar包引用方式通过Eclipse完成开发工作。
- 2015年6月19日,发布ArcGIS Runtime SDK for Android v10.2.6版本。该版本中大量的小bug得到了改进和更新。截稿至今2015年9月10日目前最新的版本为v10.2.6-u2。
- 未来版本:“Quartz”,它是ArcGIS Runtime SDK下一个大版本的代号。这一版本包括了一系列显著的功能增强,正式版本预期于2016年第一季度发行,之前会有几个beta版本发行,第一个测试版定于2015年8月发行。(2015 UC)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开发人员构建跨平台运行的应用程序。
说明:一般官网仅提供最新的SDK,以及部分版本SDK下载,对于需要使用旧版SDK的朋友可以加群 ArcGIS Runtime SDK 249819194 在群空间下载所需历史版本。
5、ArcGIS Runtime SDK for Android功能概述
使用ArcGIS Runtime SDK for Android,用户能够开发出功能强大的移动端GIS应用程序并将它们部署到Android系统的智能手机和平板上,主要功能可覆盖:
- 地图浏览:实现常见的地图缩放、平移、旋转操作,并且支持手势响应;能加载和显示图例、指南针、罗盘等多种地图辅助元素;
- 地图测量:能实现长度、面积、周长及测地线等的测量;
- 数据查询:提供多种类和接口,用来进行基于图层的搜索、关键词搜索、模糊查询、周边搜索等,还能实现空间查询和非空间查询的结合;
- 几何计算:包括简单的叠加分析、缓冲区分析,以及并、交、差等空间关系的运算;
- 分析:包括最小/最短路径分析、地理编码、通视分析等;
- 数据编辑:可编辑要素的空间信息或属性信息,空间信息包括更改要素的符号,改变要素的形状,移动要素的位置等,属性信息可更改其名称、照片等;还可新增、删除要素,并对编辑的数据进行保存;
- 离线功能:可将数据下载到本地,或者直接使用本地数据源,在移动端实现数据的编辑、保存等功能,从而实现离线的外业作业流程;
- 数据可视化:可使用多种要素符号、弹出框、图标、表格、柱状图等多种方式对数据进行展示和直观表达;
- 访问云中的资源:可轻松访问ArcGIS Online和Portal for ArcGIS中的资源和服务,实时同步,随时随地的使用云中资源;
- GPS定位:使用设备的GPS模块,进行准确的定位和导航,精度能满足大众和专业用户的需求。
- ……