【10.2移动新特性】好用的Application Framework for ArcGIS Android,简化制图和地理编码流程!
ArcGIS移动产品开发包Android和iOS 10.2版于前段时间正式发布,除了众所周知的强劲的离线支持,新版本中还有哪些激动人心的增强呢?请看“新特性系列博客”为您揭秘。
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默认包含了标题、摘要信息,以及几何图形的默认图标。也可以通过以下方法关闭Callout的显示:
mvHelper.setShowGraphicCallout(false);
开发者也可以通过为几何图形添加监听事件,通过执行onGraphicClick()方法来与几何图形进行交互:
mvHelper.setOnGraphicClickListener(new OnGraphicClickListener(){
public void onGraphicClick(graphic){
// 在此添加代码
}
});
- 显示Popup
当点击地图上的某个具体位置时,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");
}
}
});
上述代码的执行结果,会在指定的经纬度(34.056695,-117.195693)上绘制一个点,点的符号就是icon图片。当点击该图形,会弹出一个具备指定标题和文本内容的callout。返回的int值是新增的Graphic的id,如果添加失败,返回-1。
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!"); }
});
}
});
可加载名为SimpleMap的例子来查看全部代码。
更多相关文章
- android 右上角添加菜单
- 通过GridView仿微信动态添加本地图片
- android 小练习(一) ---仿微信UI主界面
- Android(安卓)显示SVG格式图片
- Android(安卓)SDK安装无法识别jdk(JAVA_HOME)的核心原因【尼玛一
- AS升级到3.1.1之后【ZXingScannerView 二维码扫描】error: resou
- Android(安卓)Studio 项目添加或导入第三方库 jar 文件
- Android(安卓)窗口添加机制系列1-Activity
- [置顶] AndroidStudio与eclipse打包的时候报错。Error:(4) Error