ArcGIS API for Android 进阶 Esri 中国 ( 北京 ) 有限公司 程轩昂
讲座提纲 ArcGIS for Android 简介 概述 产品及发布时间 Android 简介 使用 ArcGIS API for Android 进行开发 预备知识和开发环境的搭建 Android 相关概念 ArcGIS API for Android 相关概念和功能 Demo
ArcGIS for Android 简介
ArcGIS 的移动端技术 ArcGIS 云 Web 可视化 创建 ArcPad ArcGIS for Mobile ArcGIS for ios ArcGIS for Windows Phone ArcGIS for Android 移动平台 协同 发掘 管理 分析 企业 测试版已于 2011 年 2 月发布正式版将于 2011 年第 3 季度发布 桌面 本地
移动平台的两个数据 46% 125,000
ArcGIS for Android 产品及发布时间 ArcGIS for Android 应用程序 计划于 2011 年第 3 季度发布 类似于 ArcGIS for ios 和 ArcGIS for Windows Phone ArcGIS API for Android 又称 ArcGIS Runtime SDK for Android 2011 年 2 月 Beta 版发布 计划于 2011 年第 3 季度推出正式版本
ArcGIS for Android 应用程序 从 Android Market 应用商店免费下载 将提供以下功能 - 显示并导航地图 - 查找地址和地点 - 识别位置和 GIS 要素 - 查询地图图层和数据 - 测量线和面 - 通过 ArcGIS Online 查找和共享地图 - 采集 GIS 数据
ArcGIS API for Android 包括 : - API - 开发辅助工具 - 帮助文档 - 例子 以 ArcGIS API for Android Eclipse plug-ins 的形式发布, 可以在 Eclipse 中加载
ArcGIS API for Android 提供的功能 Mapping - Layers: Tiled, Dynamic, Graphic, Feature Tasks - Identify, Query, Locator, Geoprocessor Editing - Template-based, similar to other web APIs - Connected, through feature layer
授权和收费 企业内部部署 - ArcGIS Server 许可 - 部署设备不限数量 公开部署 (in App Store/Market Place/Market) - 免费程序?Esri 免费 :Esri 收费 - 收费程序?ArcGIS Server 许可 / 联系我们 程序要求 - 使用 Online 底图 :Esri/Bing Logo - 关于对话框
Android 平台
Why Android? 开放性, 可定制 支持多种设备 稳定发展的客户群 强大的自带 API
使用 ArcGIS API for Android 进行开发
预备知识及开发环境搭建
必要的准备 知识篇 具备一定的 Java 程序开发基础 拥有 Eclipse 下的程序开发经验 了解 ArcGIS 相关程序
必要的准备 软件篇 Eclipse 3.5 或者 3.6 Java development kit (JDK) 6 Android API 2.1,2.2 ArcGIS API for Android
配置 Eclipse 开发环境 安装并配置 Java SDK 6 安装 Eclipse 添加 Android Development Tools (ADT) 添加 ArcGIS API for Android Eclipse plug-ins
配置开发环境 demo
Android 开发和运行流程 Start here! Eclipse Write Java Launch as Android app Android SDK Compile to Dalvik classes Android device Dalvik VM Run app Debug/log app Deploy to device/emulator Android app framework
一个典型的 ArcGIS for Android 工程 - /src - /gen - /res - 源文件 - 编译出的类文件 - 资源文件 - Images - Styles xml - Layout xml - AndroidManifest.xml - Application configuration
配置 Eclipse 开发环境 Cont. 可能碰到的问题 : Eclipse "out of memory 找到 eclipse.ini, 修改 VM 值 -startup... --launcher.xxmaxpermsize 512m... -XX:MaxPermSize=512m -Xms512m -Xmx1024m... R.java: No such file or directory 需要将 Android SDK 添加到默认路径中
Android 开发基本概念
Android 相关概念 User Interface Overview Activity View Layout Event Listeners
Android 相关概念 :User Interface Overview - 一个应用程序包含 : - 一个或多个 Activity ( 活动 ), 其中每个活动包括 : - 一个或多个 View ( 视图 ), 每个视图的布局由 Layout ( 布局 ) 来控制
Android 相关概念 :Activity Activity( 活动 ) 是提供某项特定功能的可视化用户界面 一个程序中可能有多个 activity Activity 里可以包含其它控件 以堆栈的形式存放 Activity Activity Activity
Activity 的生命周期 On Create created On Start B4 visible On Resume Top On Pause On Stop not visible On Destroy - destroyed
Android 相关概念 :View View ( 视图 ) 是最基本的用户界面元素 Examples: - CheckBox - RadioButton - DigitalClock - MapView
Android 相关概念 :Layout Layout( 布局 ) 描述一个或多个 view 的尺寸, 位置及其它用户界面属性 通过 XML 文件进行设置 Examples: - FrameLayout - LinearLayout - TableLayout - RelativeLayout
Android 相关概念 : Event Listeners Event listeners ( 事件监听器 ) - 处理事件 ( 如屏幕操作, 状态改变等 ) - 不同的事件有不同的接口 - 每个对象对每种事件只能有一个监听器 Example: - OnClickListener interface handles View click events.
ArcGIS API for Android 基本概念
ArcGIS API for Android 提供的功能 SDK & Application Mapping - Layers: Tiled, Dynamic, Graphic, Feature Tasks - Identify, Query, Locator, Geoprocessor Editing - Template-based, similar to other web APIs - Connected, through feature layer
Mapping MapView 类 - THE map - Android View 类 Map services - ArcGIS Server - Map Services (tiled and dynamic) - Feature Services - ArcGIS.com - WebMaps - Bing ( 将在正式版中支持 )
Mapping MapView Class 通过 Android Layout 控制 - 调节尺寸和位置 - 显示的属性 默认动作 - 触摸事件 zoom, pan 自定义动作 - 添加 event listeners and handlers 初始化 - 注意检查地图是否正确加载
Mapping: 在 XML 文件中添加地图图层 <com.esri.android.map.mapview xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/map android:layout_width="fill_parent" android:layout_height="fill_parent initextent="-13631799.97888788 4545982.2729670685 13630011.658698952 4547213.547551089"> <com.esri.android.map.ags.arcgistiledmapservicelayer url="http://services.arcgisonline.com/arcgis/rest/services/ World_Topo_Map/MapServer" /> <com.esri.android.map.ags.arcgisdynamicmapservicelayer url="http://mobilesampleserver.arcgisonline.com/arcgis/rest/ services/sanfranfireinfo/mapserver" /> <com.esri.android.map.graphicslayer android:id="@+id/graphics" /> <com.esri.android.map.ags.arcgisfeaturelayer url="http://mobilesampleserver.arcgisonline.com/arcgis/rest/ services/haightashburyhydrantsfs/featureserver" mode="snapshot" />
Mapping: 在代码中添加地图图层 Dynamic map layer ArcGISDynamicMapServiceLayer sanfranfireinfo = new ArcGISDynamicMapServiceLayer(this, url); map.addlayer(sanfranfireinfo); FeatureLayer ArcGISFeatureLayer.Options(); sanfranhydrantsoptions.mode = ArcGISFeatureLayer.MODE.SNAPSHOT; ArcGISFeatureLayer sanfranhydrants = new ArcGISFeatureLayer(this, url, sanfranhydrantsoptions); map.addlayer(sanfranhydrants);
ArcGIS API for Android: Tasks Task ( 任务 ) 是进行 GIS 操作的对象组件 - 类似于其他 API 产品中的相关概念 - 仅需要少量编程即可触发
Tasks: 种类和用法
Tasks: 触发流程 Step Collect Input Call Task Display Result Description Develop dialog and/or map tools Populate input parameter value objects Instantiate Task object Develop TaskListener Develop result dialog and/or map result
Tasks: Collecting input 通过地图交互, 设置屏幕动作响应 - setonsingletaplistener() - (zoom, pinch, pan, longpress) - setonextentchangedlistener() 通过 Android 标准 UI 组件 - Buttons, Spinners - Events - onclick(), ontouch() - Android 自带 Search 功能 - Android default action
Tasks: Background Processing 所有的 tasks 都在后台运行 Two approaches: - TaskListener - AsyncTask
Tasks: TaskListener QueryTask 和 IdentifyTask 可以使用 TaskListener 实现了 oncompletion() 和 onerror() 方法 将结果显示的处理逻辑放在 oncompletion() 方法里
Tasks: AsyncTask 标准 Android 类 可用于运行 GeoprocessorTask, LocatorTask, BingLocatorTask 需要扩展 AsyncTask - 重写 doinbackground() 和 onpostexecute() - 将 Geoprocessor, Locator, BingLocator 任务代码放在 doinbackground() 方法中 - 将结果显示的处理逻辑放在 onpostexecute() 方法中
Tasks: Display Results ArcGIS for Android - Callout, graphics - Info templates ArcGIS.com popups Android - View, dialog, toast. - Many more
Tasks: Display Results- in a callout Map callout - 一个地图组件只能有一个 callout - 设置格式 - 设定显示内容 - Text or android View/ViewGroup TextView msg = new TextView(this); msg.setbackgroundcolor(color.black); msg.settext(address); msg.settextsize(12); msg.settextcolor(color.white); Callout callout = map.getcallout(); callout.setanchor(callout.anchor_position_floating); callout.setstyle(r.xml.calloutstyle); callout.refresh(); callout.show(addresspoint, msg);
Tasks: Display Results - as Graphics Graphic - Attributes - Geometry - Symbol Graphic g = new Graphic(); Graphic nearestroute = fsl.getgraphics().get(0); g.setgeometry(nearestroute.getgeometry()); SimpleLineSymbol symb = new SimpleLineSymbol( Color.DKGRAY, 2); symb.setalpha(170); symb.setantialias(true); g.setsymbol(symb); graphicslayer.addgraphic(g);
ArcGIS API for Android:Editing - Attribute Editing 属性编辑 参考 SDK 自带的 AttributeEditing 例子 通过 Feature Service - 类似于其它 webapi 中相关应用 - applyedits() 注意检查属性字段类型 - Data entry - Validation Supports FeatureTypes & Domains - Provide drop downs (Spinners) - User experience
Apply Edits method Aynchronous method - Callback tells success for each feature applyedits(adds, deletes, updates, callback) Attribute updates - Graphic - only changed attributes & ID
ArcGIS API for Android:Editing - Feature Editing 要素编辑, 添加或修改要素 使用 sketch 图层 - 通过 MapOnTouchListener 监听动作 - 实现点击和拖拽动作的响应 插入新的节点 记录编辑历史 使用本地 GeometryEngine - 没有服务器通信
GeometryEngine Local - buffer() - clip() - contains() - geodesiclenth() - getnearestcoordinate()/ver tex / vertices - intersect() - project() - union() - touches() - within()
Demo
原生应用程序还是网络程序? 市场渗透 投入产出 功能性 用户体验
Q&A? 联系方式 : Email: chengxa@esrichina-bj.cn