【10.2移动新特性】好用的Application Framework for ArcGIS Android,简化制图和地理编码流程!
2013-12-13 16:02
543 查看
ArcGIS移动产品开发包Android和iOS 10.2版于前段时间正式发布,除了众所周知的强劲的离线支持,新版本中还有哪些激动人心的增强呢?请看“新特性系列博客”为您揭秘。
添加Callout
可以为几何图形添加Callout。点击图形会自动弹出callout,callout默认包含了标题、摘要信息,以及几何图形的默认图标。也可以通过以下方法关闭Callout的显示:
开发者也可以通过为几何图形添加监听事件,通过执行onGraphicClick()方法来与几何图形进行交互:
显示Popup
当点击地图上的某个具体位置时,MapViewHelper会查询所有图层, 并使用以下方法为选定的要素创建和返回popups。Webmap中的图层不需要通过代码定义popups的样式,会自动使用popups的默认配置信息:
使用MapViewHelper类可以让您无需使用GraphicsLayer,无需定义空间参考,而直观的添加简单的图形到MapView中。如,使用MapViewHelper类添加一个自定义图标的点要素到GraphicsLayer中,并为该要素设置一个具备标题和文本内容的Callout的代码如下:
上述代码的执行结果,会在指定的经纬度(34.056695,-117.195693)上绘制一个点,点的符号就是icon图片。当点击该图形,会弹出一个具备指定标题和文本内容的callout。返回的int值是新增的Graphic的id,如果添加失败,返回-1。
下列代码进行了如下操作:当我们点击地图上的某点时,会首先在地图上绘制出该点,点击该点的图标,会弹出callout,展示参数中设计好的地址字段。
可加载名为SimpleMap的例子来查看全部代码。
ApplicationFramework for ArcGIS Android
Application framework for ArcGIS Android提供了各种简化的类来辅助Mapping和Locator工作流,通过“右键”android工程,选择“ArcGIS”>“Add Application Framework”将其加入到已有的Eclipse工程中,会有一个名为arcgis-android-app-framework.jar的文件添加到工程中。如果您没有使用Eclipse开发环境,也可以在SDK的<arcgis-install-dir>/libs/目录下找到该文件并手动添加到工程中来。MapViewHelper类
MapViewHelper类用来简化程序的工作流,比如轻松显示callout、添加几何图形、创建popups等,通过该类的构造函数可以创建类的对象,之后就可以调用MapViewHelper类的各种方法了:MapViewHelper mvHelper = new MapViewHelper(mMapView); |
可以为几何图形添加Callout。点击图形会自动弹出callout,callout默认包含了标题、摘要信息,以及几何图形的默认图标。也可以通过以下方法关闭Callout的显示:
mvHelper.setShowGraphicCallout(false); |
开发者也可以通过为几何图形添加监听事件,通过执行onGraphicClick()方法来与几何图形进行交互:
mvHelper.setOnGraphicClickListener(new OnGraphicClickListener(){ public void onGraphicClick(graphic){ // 在此添加代码 } }); |
当点击地图上的某个具体位置时,MapViewHelper会查询所有图层, 并使用以下方法为选定的要素创建和返回popups。Webmap中的图层不需要通过代码定义popups的样式,会自动使用popups的默认配置信息:
mvHelper.createPopup(screenX, screenY, new PopupCreateListener(){ public void onResult(popupContainer){ //在此添加代码 } }); |
使用MapViewHelper类可以让您无需使用GraphicsLayer,无需定义空间参考,而直观的添加简单的图形到MapView中。如,使用MapViewHelper类添加一个自定义图标的点要素到GraphicsLayer中,并为该要素设置一个具备标题和文本内容的Callout的代码如下:
// 在xml中定义好Map和mapoptions // 获取到mapview mMapView = (MapView) findViewById(R.id.map); //创建 MapViewHelper对象 mvHelper = new MapViewHelper(mMapView); // 创建icon icon = getResources().getDrawable(R.drawable.route_destination); // 确保增加geometry之前map已经加载完成 mMapView.setOnStatusChangedListener(new OnStatusChangedListener() { private staticfinal long serialVersionUID = 1L; public void onStatusChanged(Object source, STATUS status) { // Add a graphic to represent ESRI Headquarters int loaded = mvHelper.addMarkerGraphic(34.056695, -117.195693, "ESRI", "World Headquarters", null, icon, false, 0); if (loaded < 0) { Log.d("TAG", "Marker Graphic not added to MapView"); } } }); |
GeocodeHelper类
除了MapViewHelper之外,ApplicationFramework还提供了一个名为GeocodeHelper,用来支持地理编码和反地理编码。GeocodeHelper提供了一些静态方法来进行地理编码和反地理编码,这些方法简化了使用Locator时的参数设置和返回结果设置,通过Future接口可以取消地理编码和反地理编码操作,对应的callback事件也将不会被激发。但是,操作请求在被取消之前仍会被发送。使用方法如下:GeocodeHeloper geocodeHelper = new GeocodeHelper(); // 反地理编码 Future<LocatorReverseGeocodeResult> = geocodeHelper.findAddress(screenX, screenY, locator, mMapView, callback) |
下列代码进行了如下操作:当我们点击地图上的某点时,会首先在地图上绘制出该点,点击该点的图标,会弹出callout,展示参数中设计好的地址字段。
// 初始化online locator locator = Locator.createOnlineLocator(); // callout中将要显示的字段 final String[] fields = { "Address", "City", "Region", "Postal" }; // 单击地图获取该点的地址,即反地理编码 mMapView.setOnSingleTapListener(new OnSingleTapListener() { private staticfinal long serialVersionUID = 1L; public void onSingleTap(float x, float y) { // 删除已有的图形 mvHelper.removeAllGraphics(); // 使用屏幕坐标显示地址 Future result = GeocodeHelper.showAddress(x, y, locator, mvHelper, null, fields, new CallbackListener() { // 处理失败 public void onError(Throwable e) { Toast.makeText(SimpleMapActivity.this,"Error", Toast.LENGTH_LONG).show();} // 处理成功 public void onCallback(LocatorReverseGeocodeResult objs) { Log.d("TAG", "Reverse Geocode success!"); } }); } }); |
相关文章推荐
- 我的Android进阶之旅------>Android检测wifi连接状态
- Android中dip、dp、sp、pt和px的区别
- Caused by: java.lang.IllegalStateException: Ambiguous mapping found. Cannot
- SharedObject简单使用
- Android软键盘与输入框的设置
- 在iOS 7中使用storyboard(part 1)
- 最新版的IOS真机测试教程
- 【Android Developers Training】 33. 接收来自其它应用的简单数据
- 【翻译】使用新的Sencha Cmd 4命令app watch
- quick-cocos2dx 组件管理器
- 【翻译】使用新的Sencha Cmd 4命令app watch
- 【翻译】使用新的Sencha Cmd 4命令app watch
- 【翻译】使用新的Sencha Cmd 4命令app watch
- Cocos2d-x使用android拍照功能加载照片内存过大,通过另存照片尺寸大小解决
- iOS开发:从新手到专家的一些建议
- IOS调用相机,保存到沙盒
- iOS应用开发最佳实践:编写高质量的Objective-C代码
- Android json解析及简单例子
- 【Android】RatingBar 不可点击,只做显示及与listview冲突
- iOS应用开发攻略 pdf电子书